一.指定查询字段
1.查询表中所有的数据列结果,采用“*”符号
select * from 表名
和
select All * from 表名
效果一样,都是查看整张表
2.可指定查询的结果数据列
select 表字段[表字段,....] from 表名
3.DISTINCT关键字的使用
作用:去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条
语句之间的前后表字段都一致才能去重
4.AS子句
- AS子句作用
- 可给数据列取一个新别名
- 可给表取一个新别名
- 可把经计算或总结的结果用另外一个新名称来代替
- AS子句用法
如区分连接查询时两个表有同名的字段
注:
1.mysql 中的随机数(rand)
select rand();
2.想把小数转化为整数(round)
select round(rand()*70+30);
3.保留两位小数(round)
select round(rand()*70+30,2);
4.获得当前时间(datetime)
mysql> create table time( date datetime );
Query OK, 0 rows affected (0.00 sec)
mysql> insert into time values(now()),(now()),(now());
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from time;
+---------------------+
| date |
+---------------------+
| 2021-02-25 17:22:35 |
| 2021-02-25 17:22:35 |
| 2021-02-25 17:22:35 |
+---------------------+
3 rows in set (0.00 sec)
5.where条件语句
- 用于检索数据表中符合条件的记录
- 搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假
- 搜索条件的组成
- 逻辑操作符
- 比较操作符
练习:查询在80-90分之间的所有成绩记录
select score from table result where between 80 and 90;
6.逻辑操作符(更推荐使用AND,OR,NOT,效率更高)
7.比较操作符
[a].BETWEEN AND范围查询
- 根据一个范围值来检索
- 等同于 >= 和 <= 联合使用
[b].Like模糊查询
在WHERE子句中,使用LIKE关键字进行模糊查询
- 与“%”一起使用,表示匹配0或任意多个字符
- 与“_”一起使用,表示匹配单个字符
[c].使用IN进行范围查询
在WHERE子句中使用IN进行范围查询
查询的字段x的值,至少与括号中的一个值相同
多个值之间用英文逗号隔开
[d].NULL空值条件查询
- NULL代表“无值”
- 区别于零值0和空符串“”
- 只能出现在定义允许为NULL的字段
- 须使用 IS NULL 或 IS NOT NULL 比较操作符去比较
8.练习
查询所有姓“李”的学生所有成绩
mysql> select stu_id "李同学学号" ,score"李同学成绩" from student where stu_name like "李%";
+-----------------+-----------------+
| 李同学学号 | 李同学成绩 |
+-----------------+-----------------+
| 1 | 100 |
| 10 | NULL |
| 11 | NULL |
+-----------------+-----------------+
3 rows in set (0.00 sec)
二.表关系
1.关联查询
a.内连接 ( inner join,inner可以省略)
- 会展示两表关联上的所有数据
- 等值和非等值的连接查询
- 自身连接查询
b.外连接 ( out join )
- 左连接(LEFT JOIN)
会展示左表所有数据,右表展示关联上的所有数据,未关联上的以null值填充 - 右连接 ( RIGHT JOIN)
会展示右表所有数据,左表展示关联上的所有数据,未关联上的以null值填充
c.全连接(union,mysql15.8之后才支持full join)
相当于左连接 union all 右连接
union 和union all 的区别:
两个表的列相同的情况下:使用union all 会把数据纵向拼接起来
使用union是在union all的基础上去重
select 查询字段,... from 表 join 要关联的表 on 等价条件 [ join 要关联的表 on 等价条件] [where 条件语句]
d.练习
【1】现在有三张表,现在我想看到一张表上有每个人的姓名,班级,成绩
mysql> select stu.name,c.class_id,s.score from test_stu stu join test_class c on stu.id=c.id join test_score s on stu.id=s.id;
+-----------+----------+-------+
| name | class_id | score |
+-----------+----------+-------+
| 李易峰 | 1 | 90 |
| 刘昊然 | 1 | 92 |
| 王一博 | 2 | 83 |
| 陈伟霆 | 2 | 80 |
| 王嘉尔 | 3 | 90 |
| 鹿晗 | 3 | 88 |
+-----------+----------+-------+
6 rows in set (0.00 sec)
【2】.现在在学生表中加入一行数据,班级表不变,要求一张表上有学生姓名和学生班级,要求是所有学生姓名
mysql> select stu.name,c.class_id from test_stu stu left join test_class c on stu.id=c.id;
+-----------+----------+
| name | class_id |
+-----------+----------+
| 李易峰 | 1 |
| 刘昊然 | 1 |
| 王一博 | 2 |
| 陈伟霆 | 2 |
| 王嘉尔 | 3 |
| 鹿晗 | 3 |
| 吴世勋 | NULL |
+-----------+----------+
7 rows in set (0.00 sec)
【3】.现在分数表中插入了两行数据,现在要求一张表上有学生姓名和分数,要求是展现所有分数
mysql> select stu.name,s.score from test_stu stu right join test_score s on stu.id=s.id;
+-----------+-------+
| name | score |
+-----------+-------+
| 李易峰 | 90 |
| 刘昊然 | 92 |
| 王一博 | 83 |
| 陈伟霆 | 80 |
| 王嘉尔 | 90 |
| 鹿晗 | 88 |
| 吴世勋 | 90 |
| NULL | 100 |
+-----------+-------+
8 rows in set (0.00 sec)
【4】.现在班级表上也新增了一行数据,要求一张表上有所有学生的姓名和所有班级
mysql> select stu.name,c.class_id from test_stu stu left join test_class c on stu.id=c.id union select stu.name,c.class_id from test_stu stu right join test_class c on stu.id=c.id;
+-----------+----------+
| name | class_id |
+-----------+----------+
| 李易峰 | 1 |
| 刘昊然 | 1 |
| 王一博 | 2 |
| 陈伟霆 | 2 |
| 王嘉尔 | 3 |
| 鹿晗 | 3 |
| 吴世勋 | NULL |
| NULL | 3 |
+-----------+----------+
8 rows in set (0.00 sec)
2.自联查询
mysql> select * from category;
+------------+-----------------+------+
| categoryid | category_name | pid |
+------------+-----------------+------+
| 1 | 软件开发 | 0 |
| 2 | 美术设计 | 0 |
| 3 | 数据库基础 | 1 |
| 4 | PhotoShop基础 | 2 |
| 5 | 色彩搭配学 | 2 |
| 6 | PHP基础 | 1 |
| 7 | 一起学java | 1 |
+------------+-----------------+------+
7 rows in set (0.00 sec)
mysql> select a.category_name 父栏目名称,b.category_name 子栏目名称 from category a join category b on b.pid=a.categoryid;
+-----------------+-----------------+
| 父栏目名称 | 子栏目名称 |
+-----------------+-----------------+
| 软件开发 | 数据库基础 |
| 美术设计 | PhotoShop基础 |
| 美术设计 | 色彩搭配学 |
| 软件开发 | PHP基础 |
| 软件开发 | 一起学java |
+-----------------+-----------------+