day 03 DQL数据查询语言

由于sql语句不区分大小写,为了书写方便,本文所有命令统一使用小写

往期内容

目录

一、导入练习数据

二、简单查询

三、条件查询

四、排序

五、总结练习


一、导入练习数据

source  sql文件路径;

练习数据studydata.sql

链接:https://pan.baidu.com/s/1VTi06D2t1scAnZVFbyJN0w 
提取码:ljyx

也可以直接到主页---资源 进行下载


导入后会自动创建一个叫studydata的数据库,如果这个数据库存在会先删除!!!!!

若想保留原有的数据库,可以先进入到studydata.sql,把前三行的studydata(数据库名)改成其他名字。。。

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)

t_grade是成绩等级表

t_student是学生信息表

t_teacher是教师信息表

#三张表的结构

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    |       |
| stmath  | int         | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.06 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    | double(7,2) | YES  |     | NULL    |       |
| teclass     | varchar(3)  | YES  |     | NULL    |       |
| hiredate    | date        | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
6 rows in set (0.04 sec)

二、简单查询

数据查询语句主要是select语句,select语句只能进行查询,对数据的改变也只反映在查询结果上,不会修改原始数据

select 字段名1,字段名2,...... from 表名;    #查特定字段,多个字段用","隔开

select * from 表名      #查整张表 ,可读性差

#查询学生表的全部信息

mysql> select * from t_student;
+------+--------+-------+---------+--------+
| stno | stname | stsex | stclass | stmath |
+------+--------+-------+---------+--------+
| 5101 | 赵钱   | 男    | 1班     |     78 |
| 5102 | 王五   | 女    | 3班     |     68 |

| 5125 | 秋     | 男    | 3班     |     89 |
| 5126 | 孙李   | 男    | 3班     |     74 |
+------+--------+-------+---------+--------+
26 rows in set (0.00 sec)

#查询教师的姓名

mysql> select tename from t_teacher;
+--------+
| tename |
+--------+
| 点赞   |
| 关注   |
| 收藏   |
| 订阅   |
+--------+
4 rows in set (0.00 sec)

select 字段名1 as 别名1,字段名2 as 别名2,...... from 表名;       

  • as只对前一个字段名起别名,多个字段名要用多个as!!!!!!
  • as可以省略!!!!!!!
  • 别名若是有空格或中文,写成   '别名'   形式!!!!!  

(若用双引号,在oracle数据库中会报错,mysql不会报错

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.00 |
| 关注   | 111600.00 |
| 收藏   | 158400.00 |
| 订阅   | 105600.00 |
+--------+-----------+
4 rows in set (0.00 sec)

三、条件查询

条件查询,即查询符合条件的数据

select 字段名1,字段名2,字段名3....  from  表名   where   条件;

条件有哪些?

  • 只适用于数值型:大于:>,小于:<,小于等于:<=,大于等于:>=   
  • 数值型、字符型都适用的:不等于:<>  或  !=
#数学成绩大于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)

两个数值之间

  • between …(最小值)and ….(最大值)      包含最小值和最大值            
  • 字段名 >= 最小值 and  字段名 <= 最大值
#查询数学成绩在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)

is null  数据为空

is not null  数据不为空

is 不能用 '=' ,is null 代表什么都没有 !!!!!

#数学成绩为空的学生的学号、姓名、数学成绩

mysql> select stno,stname,stmath from t_student where stmath is null;
+------+--------+--------+
| stno | stname | stmath |
+------+--------+--------+
| 5116 | 南北   |   NULL |
+------+--------+--------+
1 row in set (0.00 sec)

and 并且  ,表示同时满足

# 性别为男,且数学成绩大于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)

 or 或者  ,表示满足其中一个

#’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)

 and和or同时出现的话,and优先级比or高。

如果同时出现,又先让or先执行,加小括号()

#查询数学成绩高于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)

in 包含,相当于多个 or 

not in 不包含

select 字段名1,字段名2..... from 表名 where 字段名 in (值1,值2,值3.......);

select 字段名1,字段名2..... from 表名 where 字段名 not in (值1,值2,值3.......);

#成绩为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)

like 模糊查询,支持%或下划线匹配
%匹配任意多个字符
_下划线:任意一个字符

注:匹配字符串’_‘,需要加转义字符'\'       如:%\_%

#找出姓’张‘的?

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)

四、排序

默认升序(asc可以省略):

select  字段名1,字段名2,字段名3.......  from  表名  order by  字段名  asc;     

降序排列:

select  字段名1,字段名2,字段名3.......  from  表名  order by  字段名  desc

#按薪水升序排列

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)

五、总结练习

对成绩在60到100的,并且是1班或者2班的学生的成绩进行降序排列,学号升序排列

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)

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

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷烬亿下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值