MySQL语法

TOC

一、MySQL基本语法

创建库、表、删库、删表

#新建库
create database mytest;
#新建表
use mytest;
create table myuser(name char(20) not null,passwd char(32));
#删除表
drop table mytest.myuser;
#删除库
drop database mytest;

二、数据查询

查询语法:select【关键字】from【表名】where【查询条件】;
注意:接下来的查询全部根据以下A,B两表的数据进行举例
查询表的全部数据:select * from【表名】
查询A表的全部数据

mysql> select * from A;
+--------+-------+--------+--------------------+
| 姓名   | 性别   | 年龄    | 身份证号            |
+--------+-------+--------+--------------------+
| 小红   | 女     | 18     | 510263594864226884 |
| 小静   | 女     | 18     | 510124845954894898 |
| 张三   | 男     | 22     | 265778915998475878 |
| 李四   | 男     | 23     | 35559684489451546x |
| 熊二   | 男     | 21     | 25559245845478746x |
| 熊大   | 男     | 24     | 84845125845478746x |
| 紫英   | 女     | 19     | 595965626547788466 |
+--------+--------+--------+-------------------+
7 rows in set (0.00 sec)

查询B表的全部数据

mysql> select * from B;
+--------+-------------+-------+-------------+--------+
| 姓名   | 学校         | 年级   | 专业        | 成绩   |
+--------+-------------+-------+-------------+--------+
| 子辉   | 希望学院     | 大三   | 信息工程     | 86     |
| 小红   | 阳光大学     | 大一   | 量子力学     | 99     |
| 小静   | 阳光大学     | 大一   | 环境管理     | 89     |
| 张三   | 蓝天大学     | 大三   | 网络工程     | 92     |
| 李四   | 航天学院     | 大四   | 汽车维修     | 83     |
| 熊大   | 蓝天大学     | 大二   | 软件工程     | 58     |
| 王文   | 北风大学     | 大二   | 影视表演     | 73     |
| 王五   | 信息学院     | 大三   | 信息安全     | 76     |
| 紫英   | 音乐学院     | 大四   | 播音主持     | 59     |
+--------+--------------+--------+-----------+--------+
9 rows in set (0.00 sec)

基本语法

说明:

  • SELECT:指定要查询的列名。如果要查询所有列,可以用 *。
  • FROM:指定要查询的表名。
  • WHERE:过滤条件。
  • GROUP BY:对结果进行分组。
  • HAVING:对分组后的结果进行过滤。
  • ORDER BY:指定排序列及排序方式(升序 ASC 或降序 DESC)。
  • LIMIT:限制返回的行数,offset 表示起始行,count 表示返回的行数。
    注意:以下均以A,B表的数据为例子

1.查询数据

# 查询所有列
SELECT * FROM table;
# 查询指定列
SELECT name,age FROM table;
# 使用别名
SELECT name AS 姓名,age AS 年龄 FROM table;

2.查询带条件的数据

SELECT * FROM table WHERE age > 25;

3.查询数据限制返回的行数

SELECT * FROM table LIMIT 5;

4.查询数据并去重

SELECT DISTINCT name FROM table;

5.查询数据进行排序

SELECT * FROM table ORDER BY age DESC;

6.查询分组后的数据

SELECT name,COUNT(*) FROM table GROUP BY name;

7.查询分组后带过滤条件的数据

SELECT name,COUNT(*) AS students_count FROM table GROUP BY name HAVING students_count > 5;;

8.分页查询数据

SELECT * FROM table ORDER BY id ASC LIMIT 10 OFFSET 20;
# 等同于以下写法
SELECT * FROM table ORDER BY id ASC LIMIT 20, 10;

基本查询举例(使用B表数据)

#查询成绩大于90分的学生
select 姓名,成绩 from B where 成绩 > 90;
#查询姓熊同学
select 姓名,成绩 from B where 姓名 LIKE '熊%';
#查询大三同学中成绩大于80分
select 姓名,成绩 from table-name where 年级='大二' and 成绩 > 80;
#查询显示前几行数据
select * from B limit 行数;
#改变查询结构集列的名称
select 姓名 as name, 年级 as grade from B;
#按照成绩排序
select * from B order by 成绩 DESC;

聚合函数(使用B表数据)

求和:sum() 平均:avg() 最大:max() 最小:min()

#查询总成绩
select sum(成绩) as 总成绩 from B;
#查询平均成绩
select avg(成绩) as 平均成绩 from B;
#查询最好成绩
select max(成绩) as 最高分 from B;
#查询最低成绩
select min(成绩) as 最低分 from B;
#分组查询
select 年级,sum(成绩) as 总成绩 from B group by 年级;
#查询结果另存表
create table C select * from B;

多表结合查询

注意:以下的操作都使用A和B两表数据
结合A和B表只查询有相同名字的数据信息
1.内连接查询(inner join)

mysql> select B.姓名,A.性别,A.年龄,B.学校 from A,B where A.姓名=B.姓名;
+--------+-------+--------+-------------+
| 姓名   | 性别   | 年龄   | 学校         |
+--------+-------+--------+-------------+
| 小红   | 女     | 18     | 阳光大学     |
| 小静   | 女     | 18     | 阳光大学     |
| 张三   | 男     | 22     | 蓝天大学     |
| 李四   | 男     | 23     | 航天学院     |
| 熊大   | 男     | 24     | 蓝天大学     |
| 紫英   | 女     | 19     | 音乐学院     |
+--------+-------+--------+-------------+
6 rows in set (0.00 sec)

mysql> select B.姓名,A.性别,A.年龄,B.学校 from A inner join B on A.姓名=B.姓名;
+--------+-------+--------+-------------+
| 姓名   | 性别   | 年龄   | 学校         |
+--------+-------+--------+-------------+
| 小红   | 女     | 18     | 阳光大学     |
| 小静   | 女     | 18     | 阳光大学     |
| 张三   | 男     | 22     | 蓝天大学     |
| 李四   | 男     | 23     | 航天学院     |
| 熊大   | 男     | 24     | 蓝天大学     |
| 紫英   | 女     | 19     | 音乐学院     |
+--------+-------+--------+-------------+
6 rows in set (0.00 sec)

2.左外连接查询(left join)

mysql> select B.姓名,A.性别,A.年龄,B.学校 from A left join B on A.姓名=B.姓名;
+-------+-------+--------+--------------+
| 姓名   | 性别   | 年龄   | 学校         |
+-------+--------+--------+-------------+
| 小红   | 女     | 18     | 阳光大学     |
| 小静   | 女     | 18     | 阳光大学     |
| 张三   | 男     | 22     | 蓝天大学     |
| 李四   | 男     | 23     | 航天学院     |
| 熊大   | 男     | 24     | 蓝天大学     |
| 紫英   | 女     | 19     | 音乐学院     |
| NULL  | 男     | 21     | NULL        |
+--------+-------+--------+-------------+
7 rows in set (0.00 sec)

3.右外连接查询(right join)

mysql> select B.姓名,A.性别,A.年龄,B.学校 from A right join B on A.姓名=B.姓名;
+-------+--------+--------+-------------+
| 姓名   | 性别   | 年龄    | 学校        |
+-------+--------+--------+-------------+
| 小红   | 女     | 18     | 阳光大学     |
| 小静   | 女     | 18     | 阳光大学     |
| 张三   | 男     | 22     | 蓝天大学     |
| 李四   | 男     | 23     | 航天学院     |
| 熊大   | 男     | 24     | 蓝天大学     |
| 紫英   | 女     | 19     | 音乐学院     |
| 子辉   | NULL   | NULL   | 希望学院     |
| 王文   | NULL   | NULL   | 北风大学     |
| 王五   | NULL   | NULL   | 信息学院     |
+-------+--------+--------+-------------+
9 rows in set (0.00 sec)

信息查询操作

#查看库信息
show databases;
#切换数据库
use database_name;
#查看表信息
show tables;
#查询表里的索引
show index from tablename;    
show keys from tablename;

三、数据插入

基本语法

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

说明:

  • table_name:目标表的名称。
  • column1, column2, column3:指定插入的列。
  • value1, value2, value3: 插入的行数据,为表的每一列提供值。

1.插入指定字段的数据

INSERT INTO students (id, name, age, city) VALUES (1, 'Alice', 18, 'chengdu');

2.插入所有字段的数据

INSERT INTO students (id, name, age, city) VALUES (2, 'zhangsan', 19, 'chengdu');

3.插入多行数据

INSERT INTO students (id, name, age, city) VALUES (3, 'Tom', 17, 'beijing'), (4, 'Daive', 23, 'NewYork');

4.插入从查询结果中获取的数据

INSERT INTO students (id, name, age, city) 
SELECT id, name, age, city FROM users WHERE age > 20;

四、数据修改

基本语法

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

说明:

  • SET:指定要更新的列及其新值。
  • WHERE:指定更新条件。如果省略 WHERE,将更新表中所有数据(慎用)。

1.更新指定条件的数据

UPDATE students SET age = 28 WHERE id = 1;

2.更新所有的数据

UPDATE students SET city = 'chengdu'

3.使用子查询更新

UPDATE students SET city = (SELECT city FROM users WHERE name = 'zhangsan') WHERE id = 2;

五、删除数据

基本语法

1.删除指定条件数据

DELETE FROM students WHERE age > 25;

2.删除所有数据

DELETE FROM students;
# 删除表中所有数据并重置自增列(慎用)
TRUNCATE TABLE students;