0
点赞
收藏
分享

微信扫一扫

day 03 DQL数据查询语言-初窥门径

witmy 2022-03-27 阅读 94

一、导入练习数据

mysql> source C:\Users\me\Desktop\studydata.sql
Query OK, 3 rows affected (0.15 sec)

......

Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+---------------------+
| Tables_in_studydata |
+---------------------+
| t_grade             |
| t_student           |
| t_teacher           |
+---------------------+
3 rows in set (0.04 sec)
#三张表的结构

mysql> desc t_grade;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| grade | char(3) | NO   | PRI | NULL    |       |
| min   | int     | YES  |     | NULL    |       |
| max   | int     | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
3 rows in set (0.04 sec)

mysql> desc t_student;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| stno       | int         | NO   | PRI | NULL    |       |
| stname     | varchar(10) | YES  |     | NULL    |       |
| stsex      | char(2)     | YES  |     | NULL    |       |
| stclass    | varchar(3)  | YES  |     | NULL    |       |
| steacherno | int         | YES  |     | NULL    |       |
| stmath     | int         | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> desc t_teacher;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| teno        | int         | NO   | PRI | NULL    |       |
| tename      | varchar(10) | YES  |     | NULL    |       |
| Englishname | varchar(32) | YES  |     | NULL    |       |
| tesalary    | int         | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)

二、简单查询

#查询学生表的全部信息

mysql> select * from t_student;
+------+--------+-------+---------+------------+--------+
| stno | stname | stsex | stclass | steacherno | stmath |
+------+--------+-------+---------+------------+--------+
| 5101 | 赵钱   | 男    | 1班     |       9801 |     78 |
| 5102 | 王五   | 女    | 3班     |       9804 |     68 |
| 5103 | 上下   | 男    | 1班     |       9804 |     47 |
......  
| 5126 | 孙李   | 男    | 3班     |       9802 |     74 |
+------+--------+-------+---------+------------+--------+
26 rows in set (0.00 sec)

#查询教师的姓名

mysql> select tename from t_teacher;
+--------+
| tename |
+--------+
| 点赞   |
| 关注   |
| 收藏   |
| 订阅   |
+--------+
4 rows in set (0.00 sec)
mysql> select teno teacherno, tename as 'teacher name' from t_teacher;
+-----------+--------------+
| teacherno | teacher name |
+-----------+--------------+
|      9801 | 点赞         |
|      9802 | 关注         |
|      9803 | 收藏         |
|      9804 | 订阅         |
+-----------+--------------+
4 rows in set (0.00 sec)
#计算各位教师的年薪

mysql> select tename,tesalary*12 as '年薪' from t_teacher;
+--------+--------+
| tename | 年薪   |
+--------+--------+
| 点赞   | 102000 |
| 关注   | 111600 |
| 收藏   | 158400 |
| 订阅   | 105600 |
+--------+--------+
4 rows in set (0.00 sec)

三、条件查询

条件有哪些?

#数学成绩大于80分的学生的学号、姓名、数学成绩

mysql> select stno,stname,stmath from t_student where stmath>80;
+------+--------+--------+
| stno | stname | stmath |
+------+--------+--------+
| 5104 | 钱七   |     93 |
| 5107 | 左右   |     88 |
| 5110 | 周四   |     94 |
| 5112 | 夏     |     82 |
| 5114 | 张三   |     87 |
| 5115 | 甲乙   |     88 |
| 5117 | 前后   |     93 |
| 5118 | 周五   |     99 |
| 5120 | 冷烬   |    100 |
| 5123 | 丙丁   |     91 |
| 5125 | 秋     |     89 |
+------+--------+--------+
11 rows in set (0.00 sec)

#数学成绩等于100的学生的学号、姓名、数学成绩

+------+--------+--------+
| stno | stname | stmath |
+------+--------+--------+
| 5120 | 冷烬   |    100 |
+------+--------+--------+
1 row in set (0.00 sec)

#学生名字为'张三' 的的学号、姓名、数学成绩

mysql> select stno,stname,stmath from t_student where stname='张三';
+------+--------+--------+
| stno | stname | stmath |
+------+--------+--------+
| 5114 | 张三   |     87 |
+------+--------+--------+
1 row in set (0.00 sec)
#查询数学成绩在75到85之间的所有学生的学号、姓名、数学成绩

mysql> select stno,stname,stmath from t_student where stmath between 75 and 85;
+------+--------+--------+
| stno | stname | stmath |
+------+--------+--------+
| 5101 | 赵钱   |     78 |
| 5109 | 周三   |     77 |
| 5112 | 夏     |     82 |
| 5113 | 赵六   |     76 |
| 5122 | 周二   |     78 |
+------+--------+--------+
5 rows in set (0.00 sec)


mysql> select stno,stname,stmath from t_student where stmath >= 75 and stmath <= 85;
+------+--------+--------+
| stno | stname | stmath |
+------+--------+--------+
| 5101 | 赵钱   |     78 |
| 5109 | 周三   |     77 |
| 5112 | 夏     |     82 |
| 5113 | 赵六   |     76 |
| 5122 | 周二   |     78 |
+------+--------+--------+
5 rows in set (0.00 sec)
#数学成绩为空的学生的学号、姓名、数学成绩

mysql> select stno,stname,stmath from t_student where stmath is null;
+------+--------+--------+
| stno | stname | stmath |
+------+--------+--------+
| 5116 | 南北   |   NULL |
+------+--------+--------+
1 row in set (0.00 sec)
# 性别为男,且数学成绩大于80分的学生的学号、姓名、性别、数学成绩

mysql> select stno,stname,stsex,stmath from t_student where stsex='男' and stmath>80;
+------+--------+-------+--------+
| stno | stname | stsex | stmath |
+------+--------+-------+--------+
| 5107 | 左右   | 男    |     88 |
| 5110 | 周四   | 男    |     94 |
| 5118 | 周五   | 男    |     99 |
| 5120 | 冷烬   | 男    |    100 |
| 5123 | 丙丁   | 男    |     91 |
| 5125 | 秋     | 男    |     89 |
+------+--------+-------+--------+
6 rows in set (0.00 sec)
#’1班‘的学生或者数学成绩大于90的学生的学号、姓名、班级、数学成绩

mysql> select stno,stname,stclass,stmath from t_student where stclass='1班' or stmath>90;
+------+--------+---------+--------+
| stno | stname | stclass | stmath |
+------+--------+---------+--------+
| 5101 | 赵钱   | 1班     |     78 |
| 5103 | 上下   | 1班     |     47 |
| 5104 | 钱七   | 1班     |     93 |
| 5109 | 周三   | 1班     |     77 |
| 5110 | 周四   | 2班     |     94 |
| 5114 | 张三   | 1班     |     87 |
| 5117 | 前后   | 1班     |     93 |
| 5118 | 周五   | 2班     |     99 |
| 5119 | 春     | 1班     |     73 |
| 5120 | 冷烬   | 2班     |    100 |
| 5121 | 冬     | 1班     |     54 |
| 5123 | 丙丁   | 1班     |     91 |
+------+--------+---------+--------+
12 rows in set (0.00 sec)
#查询数学成绩高于80分,并且是'1班'或者'3班'的学生的学号、姓名、班级、数学成绩

mysql> select stno,stname,stclass,stmath from t_student where stmath>80 and stclass='1班' or stclass='3班';
+------+--------+---------+--------+
| stno | stname | stclass | stmath |
+------+--------+---------+--------+
| 5102 | 王五   | 3班     |     68 |
| 5104 | 钱七   | 1班     |     93 |
| 5112 | 夏     | 3班     |     82 |
| 5114 | 张三   | 1班     |     87 |
| 5115 | 甲乙   | 3班     |     88 |
| 5116 | 南北   | 3班     |   NULL |
| 5117 | 前后   | 1班     |     93 |
| 5122 | 周二   | 3班     |     78 |
| 5123 | 丙丁   | 1班     |     91 |
| 5124 | 周六   | 3班     |     58 |
| 5125 | 秋     | 3班     |     89 |
| 5126 | 孙李   | 3班     |     74 |
+------+--------+---------+--------+
12 rows in set (0.00 sec)

mysql> select stno,stname,stclass,stmath from t_student where stmath>80 and (stclass='1班' or stclass='3班');
+------+--------+---------+--------+
| stno | stname | stclass | stmath |
+------+--------+---------+--------+
| 5104 | 钱七   | 1班     |     93 |
| 5112 | 夏     | 3班     |     82 |
| 5114 | 张三   | 1班     |     87 |
| 5115 | 甲乙   | 3班     |     88 |
| 5117 | 前后   | 1班     |     93 |
| 5123 | 丙丁   | 1班     |     91 |
| 5125 | 秋     | 3班     |     89 |
+------+--------+---------+--------+
7 rows in set (0.00 sec)
#成绩为82,87,88,100 的学生的学号、姓名、班级、数学成绩

mysql> select stno,stname,stclass,stmath from t_student where stmath in (82,87,88,100);
+------+--------+---------+--------+
| stno | stname | stclass | stmath |
+------+--------+---------+--------+
| 5107 | 左右   | 2班     |     88 |
| 5112 | 夏     | 3班     |     82 |
| 5114 | 张三   | 1班     |     87 |
| 5115 | 甲乙   | 3班     |     88 |
| 5120 | 冷烬   | 2班     |    100 |
+------+--------+---------+--------+
5 rows in set (0.00 sec)
#找出姓’张‘的?

mysql> select stno,stname from t_student  where stname like '张%';
+------+--------+
| stno | stname |
+------+--------+
| 5114 | 张三   |
+------+--------+
1 row in set (0.04 sec)

找出名字以’四‘结束的?  

mysql> select stno,stname from t_student  where stname like '%四';
+------+--------+
| stno | stname |
+------+--------+
| 5105 | 李四   |
| 5110 | 周四   |
+------+--------+
2 rows in set (0.00 sec)

找出名字第二个字是’五‘的?

mysql> select stno,stname from t_student  where stname like '_五%';
+------+--------+
| stno | stname |
+------+--------+
| 5102 | 王五   |
| 5118 | 周五   |
+------+--------+
2 rows in set (0.00 sec)

找出名字第三个字是’五‘的?

mysql> select stno,stname from t_student where stname like '__五%';
Empty set (0.00 sec)

四、排序

#按薪水升序排列

mysql> select * from t_teacher order by tesalary;
+------+--------+----------+
| teno | tename | tesalary |
+------+--------+----------+
| 9801 | 点赞   |     8500 |
| 9804 | 订阅   |     8800 |
| 9802 | 关注   |     9300 |
| 9803 | 收藏   |    13200 |
+------+--------+----------+
4 rows in set (0.00 sec)
#按成绩升序排列,学号降序排列

mysql> select stno,stname,stmath from t_student order by stmath,stno desc;
+------+--------+--------+
| stno | stname | stmath |
+------+--------+--------+
| 5116 | 南北   |   NULL |

...........
| 5117 | 前后   |     93 |
| 5104 | 钱七   |     93 |
| 5110 | 周四   |     94 |
| 5118 | 周五   |     99 |
| 5120 | 冷烬   |    100 |
+------+--------+--------+
26 rows in set (0.00 sec)

总结练习:

mysql> select
    -> stno,stname,stclass,stmath
    -> from
    -> t_student
    -> where
    -> (stmath>=60 and stmath <=100) and (stclass='1班' or stclass='2班')
    -> order by
    -> stmath desc,stno;
+------+--------+---------+--------+
| stno | stname | stclass | stmath |
+------+--------+---------+--------+
| 5120 | 冷烬   | 2班     |    100 |
| 5118 | 周五   | 2班     |     99 |
| 5110 | 周四   | 2班     |     94 |
| 5104 | 钱七   | 1班     |     93 |
| 5117 | 前后   | 1班     |     93 |
| 5123 | 丙丁   | 1班     |     91 |
| 5107 | 左右   | 2班     |     88 |
| 5114 | 张三   | 1班     |     87 |
| 5101 | 赵钱   | 1班     |     78 |
| 5109 | 周三   | 1班     |     77 |
| 5113 | 赵六   | 2班     |     76 |
| 5119 | 春     | 1班     |     73 |
| 5111 | 周日   | 2班     |     69 |
| 5108 | 周一   | 2班     |     68 |
+------+--------+---------+--------+
14 rows in set (0.00 sec)

未完待续。。。。。。。。。。

举报

相关推荐

0 条评论