MySQL语法
一、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;