数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句

数据库函数 select 查询语句

SQL语句

* DDL create,drop, alter

* DML insert,delete,update,select

* DCL grant,revoke

* TCL commit; rollback;

 

DDL修饰符:

* unsigned  非负数

* zerofill  0填充

* default 默认值

* null    空值

 

约束:

* primary key 主键,非空 + 唯一

* unique      唯一键, 不能有重值

* not null    非空

 

* auto_increment 自增长 int,必须是primary key主键

 

1.SELECT 查询语句 的分类  语法结构 多表连接 案例

简单查询语句从一个表中查询数据

 

复杂查询语句多表连接查询 (将来源于多个表的列横向叠加)

*内连接 *左连接  *右连接   *全连接   * 自连接    *非等值连接

 

复合查询(将查询结果集上下叠加)

*Union*Union All  *Intersect  *Minus

并集 交集差集

 

子查询

* 非关联子查询 *关联子查询

 

语法结构

SELECT select_list                  # 1个或多个列名,之间用逗号隔开,列也称作投影

[ INTO new_table ]                        # 结果集放入指定文件

FROM [table_source]                       #表名

[ WHERE search_condition ]              #表行过滤条件

[ GROUP BY group_by_expression ]  #按照指定的列将表行分组,形成新的行

[ HAVING search_condition ]            #对分组后的新行进行过滤    

[ ORDER BY order_expression [ ASC | DESC ] ]  #按照指定的1个或多个列进行排序,ASC=增序,DESC=降序

 

select  where子句 常用 的算数 逻辑 比较运算符  通配 运算符 和优先级

where子句对行记录进行过滤

1.算数运算符:

+,-,*, / 对应 加,减,乘,除

 

2.逻辑运算符:

not (非);and (而且);or(或者);

 

3.比较运算符:

= 等于;   !=或<>不等于;  >大于;  <小于;  >=大于等于;   <=小于等于;

is null为空值;    is not null为非空值;

in (值列表) 在值列表中not in (值列表)不在值列表中;

between 低值 and 高值 (包含低值和高值)在低值和高值之间;

not between 低值 and 高值 (包含低值和高值)不在低值和高值范围内;

like ‘通配符’按照通配符进行匹配;

 

4.常用通配符:

% 匹配0个或任意多个字符_ 匹配任意1个字符

 

5.运算符优先级

各类运算符之间存在优先级,只记住括号( )的优先级最高即可

 

1.查询学生表中性别为‘女’,体重超过60公斤的学生的所有信息

 

三个表

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第1张图片

 

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第2张图片

 

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第3张图片

 

 

 

查询学生表中性别为‘女’,体重超过60公斤的学生的所有信息

select * from stu where sex='女' and weight>60;

数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第4张图片

 

 

 

 

2.查询学生表中1班或者2班中,身高超过190的学生

select * from stu where (cno=1 or cno=2) and height>190;

或者  

select * from stu where cno in (1,2) and height>190;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第5张图片

 

 

3.查询学生表中3班学生里面考分在400和520之间的女生

select * from stu where cno=3 and sex='女' and score between 400 and 520;

或者

select * from stu where cno=3 and sex='女' and (score>= 400 and score<=520);

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第6张图片

 

 

4.查询学生表中  没有分配班级  而且是女生的学生

select * from stu where cno is null and sex='女';

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第7张图片

 

 

 

5.在学生表体重低于40公斤且身高低于1.65米的学生,列出其姓名,身高,体重,总分以及总分占750分满分的百分比

select sname,height,weight,score,score/750*100 from stu where height/100<1.65 and weight<40;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第8张图片

 

 

6.在学生表中查找学生姓名,第二个字是‘侯’, 或者 第一个字是‘张’且名字只有两个字的学生

select * from stu where sname like '_%' or sname like '张_';

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第9张图片

 

 

2mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数

函数用来处理SQL语句中的数据,可以嵌入在SQL语句中使用,增加了SQL语句对数据的处理功能

函数可以有0到多个参数,但是总会有一个返回值

函数可以用来计算、修改、格式化输出二维表中的各类数据

不同数据库的函数的名称和用法略有不同,

但都会提供如:

字符串处理、数值处理、日期处理、统计等分类的函数、方便用户处理各类数据

数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第10张图片

 

 

 

1.字符串函数  char_length(字符串) 的长度  三个字  姓名的学生

char_length(str)字符串长度

计算参数str中有多少个字符,str可以是具体的一个字符串,也可以是表中的列

 

1.查看字符串“中国人”有几个字(后面为常量from可省略

select char_length('中国人');

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第11张图片

 

 

 

2.学生表中姓名为 三个字 的学生有哪些?

select * from stu where char_length(sname)=3;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第12张图片

 

 

select * from stu where sname like '___';

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第13张图片

 

 

有些需求仅靠SQL语句提供的功能无法实现,必须依靠数据库提供的函数

2.concat(str1,str2,……)拼接  把参数str1和str2拼接成一个字符串 班级+姓名

把参数str1和str2拼接成一个字符串

1.把‘我是’和‘中国人’拼接成一句话

select concat('我是','中国人');

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第14张图片

 

 

 

2.学生表打印已分班的学生姓名和班级,以xxx是x班 的形式打印结果

select concat(sname,'是',cno,'班') 名称表from stu where cno is not null;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第15张图片

 

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第16张图片

 

 

 

3.substr(str,pos,len)截取 把参数str字符串从第pos位起,截取len位

把参数str字符串从第pos位起,截取len位 字符串 姓氏

 

1.把‘我是中国人’字符串从第3位起截取3位字符

select substr('我是中国人',3,3);

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第17张图片

 

 

 

二班的同学 都有什么姓氏? (截取第一个字段)  二班同学的姓氏

select substr(sname,1,1) from stu where cno=2;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第18张图片

 

 

4.)MySQL 数值 四舍五入 函数round(num,n),数字 和 身高体重bmi值

 

四舍五入不要小数缺省为正数  0

对数字num进行四舍五入运算,从第n位小数算起(保留几位)

 

1.)15.5469,保留2位小数,从第2位小数进行四舍五入运算

select round(15.5469,2);

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第19张图片

 

数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第20张图片

 

 

 

 

 

2.)计算肥胖学生 许褚 的BMI值,四舍五入保留2位小数,体重/身高^2

 

select round(weight/(height/100*height/100),2) from stu where sname='许褚';

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第21张图片

 

 

5.)MySQL 日期 函数year(date1)  month(date1)

year(date1)

获取日期date1的年份

select year(2019-11-27 09:00:00);

 

month(date1)

获取日期date1的月份

 

1.学生表中哪些同学是1990年出生的?

select * from stu where year(birth)=1990;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第22张图片

 

 

 

2.学生表中哪些同学是8月出生的?

select * from stu where month(birth)=8;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第23张图片

 

 

 

6.)计算  时间curdate datediff(date1,date2)  计算年龄 生日 小于23岁

curdate()获取当前日期

curtime()获取当前时间

now()获取当前的日期和时间

datediff(date1,date2)返回date1和date2两个日期间  隔的天数

 

1.计算2018年6月1日和2018年元旦之间间隔的天数

select datediff('2018-6-1','2018-1-1');

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第24张图片

 

 

select datediff('2019-11-29','2015-10-20');   和静差1501天

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第25张图片

 

 

 

2计算学生表中学生的年龄,显示姓名,生日,年龄(保留2位小数),只显示小于23岁的同学

select sname,birth,round(datediff(now(),birth)/365,2) from stu where round(datediff(now(),birth)/365,2)<23;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第26张图片

 

 

7.MySQL  条件判断函数 if(expr,v1,v2)  分数  姓名复姓

if(expr,v1,v2)如果表达式expr成立,返回v1值  否则,返回v2值

 

1..如果学生高考分大于等于520,其为统招生,否则其为委培生,从学生表中查找,显示姓名,考分,类型(统招或委培

 

select sname,score,if(score>=520,'统招','委培') 类型 from stu;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第27张图片

 

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第28张图片

 

 

 

 

 

2.新来的学生都姓什么,需要考虑复姓(诸葛、太史、夏侯)和外号(大乔、小乔)?

select sname,substr(sname,if(sname in ('大乔','小乔'),2,1),if(substr(sname,1,2) in ('诸葛','太史','夏侯'),2,1)) 姓 from stu;

先从外号中筛选出大乔小乔,选出乔姓,然后截取两位名字,如果是诸葛,夏侯,太史截取两位,其他的就截取一位。

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第29张图片

 

 

8.)MySQL CASE运算符 多重条件判断 考分是700优秀 600良好

CASE运算符为SQL语句增加了多重条件判断比if函数更加灵活

case when expr1 then v1 [when expr2  v2 then] …… else vn end

 

1.如果考分700以上,优秀,600以上,良好,520以上,中等,否则,较差,按照这个原则列出学生表中的学生,显示姓名,考分,和评判等级

select sname,score,(case when score>=700 then '优秀' when score>=600 then '良好' when score>=520 then '中等' else '较差' end) 等级 from stu;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第30张图片

 

 

9.)MySQL 空值处理函数 ifnull  isnull 显示未分班的同学

空值问题:

使用in时,值列表中有null值,不会返回null相关结果

select * from stu where cno in (2,null);

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第31张图片

 

 

 

 

 

 

使用not in列表中有空值时,无查询结果返回

select * from stu where cno not in (2,null);  

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第32张图片

 

 

有时空值会造成意想不到的问题,需要用空值函数先对空值进行处理

常用空值处理函数

ifnull(v1,v2) 如果v1为空返回v2,否则返回v1

isnull(expr) 如果表达式为null空值,返回1,表达式非空则返回0

 

1.仅显示2班和没有分班的同学

select * from stu where cno=2 or cno is null;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第33张图片

 

 

select * from stu where cno=2 or ifnull(cno,0)=0;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第34张图片

 

 

select * from stu where ifnull(cno,0) in (2,0);

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第35张图片

 

 

select * from stu where isnull(cno)=1 or cno=2;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第36张图片

 

 

10.)MySQL 聚合函数 max最大 min最小 sun求和 avg平均 coun行的数量t

聚合函数

max(列名)

统计出列中所有中的最大值,列的数据类型可以是数值、字符、日期型

min(列名)

统计出列中所有中的最小值,列的数据类型可以是数值、字符、日期型

sum(列名)

统计出列中所有行中数值总和列的数据类型不能是字符型

avg(列名)

统计出列中所有行中数值的平均值,列的数据类型不能是字符型

count(列名)

统计出列中所有行的数量列中的如果有空值不会被统计计数

 

 

1.找出学生中最高的身高、最轻的体重、平均高考分数、学生的总数

select max(height),min(weight),sum(score)/count(*),avg(score),count(*),count(sno),count(cno) from stu;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第37张图片

 

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第38张图片

 

 

注意:列中有空值时不会被count函数统计计数  只有一行数据结果

 

2.用一个查询语句找出学生中  最低的身高、再显示所有人的姓名

select min(height),sname from stu;

 

 

 

查询语句报错了:min(height)只有1个值1行,sname有20行,1行对接20行是个矛盾的事情,因此不能这么写

select min(height),group_concat(sname) from stu;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第39张图片

 

 

注意:group_concat也属于一种聚合函数,此列中把20个人的名字(20行),用逗号分隔连成一个字符串(1行),这样就不会报错了。

3.)SELECT语句  DISTINCT关键字  表 列 的别名

1.)ditinct查询出指定的1个或多个字段的不重复记录  班级号 性别

1.查询出学生表中都有哪些班号,要求去除重复班号

select distinct cno from stu;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第40张图片

 

 

 

2.列出学生表中 不重复的 班号和性别

select distinct cno,sex from stu;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第41张图片

 

 

注意:distinct关键字必须放在第一列,后续的1个或多个列作为去重列

 

select distinct sname,cno,sex,weight from stu;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第42张图片

 

 

2.)MySQL 列 表 的别名  表头用对应的中文显示 姓名 生日

列别名:给列起个额外的名称用来替代列原来的名称

select sname [as] 姓名 from stu;“as”可写可不写

 

表头用对应的中文显示

1.列出2班的学生姓名,性别,生日。

select sname as 学生姓名,sex 性别,birth 生日 from stu where cno=2;

如果别名中有空格,或者别名是SQL保留字(如:select,from,where)别名要用双引号“”括起来,否则报错

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第43张图片

 

 

 

表的别名

表别名:给表起个额外的名称用来替代表原来的名称

select s.sname,s.sex from stu as s;“as”可写可不写

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第44张图片

 

 

 

1.列出2班的学生姓名,性别,生日,查询语句使用表别名来引用列名

select s.sname,sex,s.birth from stu s where s.cno=2;重点是from后面的内容。

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第45张图片

 

 

注意:多表连接查询往往经常使用表别名来区分不同表 确名字相同的列;

如果表名很长使用表别名会使查询语句看起来比较简洁;

在数据库图形管理工具中书写查询语句时使用表别名,键入“表别名.列名”时,会出现下拉列表选择框,将大大提高工作效率r

4.select 内容 from表order  by  子句

对查询结果集按照order by后面指定的1列或多列排序

 

分为增序和降序

增序a's'c,默认可以不写

降序 de's'c

 

对于数值,增序是从小到大,降序是从大到小

对于日期和时间,增序是从远到近,降序是从近到远

对于英文字符,增序是从a到z,降序是从z到a

对于中文字符,增序按照字符集编码从小到大,降序按照字符集编码从大到小,如果选择gbk编码可以按照拼音来排序

 

对于排序列的名称,可以用以下方式

列名、列别名、列的序号、函数、表达式等

 

1.按照体重增序列出学生信息

select * from stu order by weight;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第46张图片

 

 

2.展示已分班学生信息,先按照班号增序,再按照考分降序排列

select * from stu where cno is not null order by cno,score desc;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第47张图片

 

 

3.按照拼音降序排列所有学生

注意:

由于汉字在utf8编码中不是按照拼音顺序排列的,需要用到convert函数转换列sname的编码到GBK(国标库);如果表列为gbk编码不需要

 

select * from stu order by convert(sname using gbk) desc;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第48张图片

 

 

 

4.显示学生性别,姓名,生日3列信息,先按第1列,再按第3列降序排序

select sex,sname,birth from stu order by 1,3 desc;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第49张图片

 

 

 

5.按照班号增序排序,没有分班的同学排在后面

select * from stu order by isnull(cno),cno;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第50张图片

 

 

所有的不是空值的返回零排在了前面,后面空值返回一排在了后面

 

6按照《关张赵马黄》的顺序排序2班同学

select * from stu where cno=2 order by (case when substr(sname,1,1)='关' then 1 when substr(sname,1,1)='张' then 2 when substr(sname,1,1)='赵' then 3 when substr(sname,1,1)='马' then 4 when substr(sname,1,1)='黄' then 5 else 6 end);

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第51张图片

 

 

5.SELECT - LIMIT 子句

SELECT语句中的LIMIT子句最后执行

其作用是仅显示查询结果集中的部分内容

1.显示stu表中考分最高的3名学生

select * from stu order by score desc limit 3;

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第52张图片

 

 

select * from stu order by score desc limit 0,3;  

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第53张图片

 

 

#limit 0,3中的0为第1条记录,如:limit 5,3意思为从结果集的第6条起,显示3条记录。简单理解:第一个参数代表起始行(参数值+1)第二个参数代表行的跨度数

 

比如1,3就不一样了,1,3代表从第2位开始截取3位,0代表第一位。

 数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句_第54张图片

 

 

6.面试题alter 和 delete有什么区别?alter 和 update有什么区别?

alter 和 delete有什么区别?

*alter属于DDL语句

*alter改变表的结构

 

* delete属于DML语句

* delete不会改变表的结构

* delete删除行

 

alter 和 update有什么区别?

*alter属于DDL语句

*alter改变表的结构

 

* update属于DML语句

* update修改现存行的信息

* update不会改变表的结构

数据库函数 select 查询语句

SQL语句

* DDL create,drop, alter

* DML insert,delete,update,select

* DCL grant,revoke

* TCL commit; rollback;

 

DDL修饰符:

* unsigned  非负数

* zerofill  0填充

* default 默认值

* null    空值

 

约束:

* primary key 主键,非空 + 唯一

* unique      唯一键, 不能有重值

* not null    非空

 

* auto_increment 自增长 int,必须是primary key主键

 

1.SELECT 查询语句 的分类  语法结构 多表连接 案例

简单查询语句从一个表中查询数据

 

复杂查询语句多表连接查询 (将来源于多个表的列横向叠加)

*内连接 *左连接  *右连接   *全连接   * 自连接    *非等值连接

 

复合查询(将查询结果集上下叠加)

*Union*Union All  *Intersect  *Minus

并集 交集差集

 

子查询

* 非关联子查询 *关联子查询

 

语法结构

SELECT select_list                  # 1个或多个列名,之间用逗号隔开,列也称作投影

[ INTO new_table ]                        # 结果集放入指定文件

FROM [table_source]                       #表名

[ WHERE search_condition ]              #表行过滤条件

[ GROUP BY group_by_expression ]  #按照指定的列将表行分组,形成新的行

[ HAVING search_condition ]            #对分组后的新行进行过滤    

[ ORDER BY order_expression [ ASC | DESC ] ]  #按照指定的1个或多个列进行排序,ASC=增序,DESC=降序

 

select  where子句 常用 的算数 逻辑 比较运算符  通配 运算符 和优先级

where子句对行记录进行过滤

1.算数运算符:

+,-,*, / 对应 加,减,乘,除

 

2.逻辑运算符:

not (非);and (而且);or(或者);

 

3.比较运算符:

= 等于;   !=或<>不等于;  >大于;  <小于;  >=大于等于;   <=小于等于;

is null为空值;    is not null为非空值;

in (值列表) 在值列表中not in (值列表)不在值列表中;

between 低值 and 高值 (包含低值和高值)在低值和高值之间;

not between 低值 and 高值 (包含低值和高值)不在低值和高值范围内;

like ‘通配符’按照通配符进行匹配;

 

4.常用通配符:

% 匹配0个或任意多个字符_ 匹配任意1个字符

 

5.运算符优先级

各类运算符之间存在优先级,只记住括号( )的优先级最高即可

 

1.查询学生表中性别为‘女’,体重超过60公斤的学生的所有信息

 

三个表

 

 

 

 

 

查询学生表中性别为‘女’,体重超过60公斤的学生的所有信息

select * from stu where sex='女' and weight>60;

 

 

2.查询学生表中1班或者2班中,身高超过190的学生

select * from stu where (cno=1 or cno=2) and height>190;

或者  

select * from stu where cno in (1,2) and height>190;

 

3.查询学生表中3班学生里面考分在400和520之间的女生

select * from stu where cno=3 and sex='女' and score between 400 and 520;

或者

select * from stu where cno=3 and sex='女' and (score>= 400 and score<=520);

 

4.查询学生表中  没有分配班级  而且是女生的学生

select * from stu where cno is null and sex='女';

 

 

5.在学生表体重低于40公斤且身高低于1.65米的学生,列出其姓名,身高,体重,总分以及总分占750分满分的百分比

select sname,height,weight,score,score/750*100 from stu where height/100<1.65 and weight<40;

 

6.在学生表中查找学生姓名,第二个字是‘侯’, 或者 第一个字是‘张’且名字只有两个字的学生

select * from stu where sname like '_%' or sname like '张_';

 

2mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数

函数用来处理SQL语句中的数据,可以嵌入在SQL语句中使用,增加了SQL语句对数据的处理功能

函数可以有0到多个参数,但是总会有一个返回值

函数可以用来计算、修改、格式化输出二维表中的各类数据

不同数据库的函数的名称和用法略有不同,

但都会提供如:

字符串处理、数值处理、日期处理、统计等分类的函数、方便用户处理各类数据

 

1.字符串函数  char_length(字符串) 的长度  三个字  姓名的学生

char_length(str)字符串长度

计算参数str中有多少个字符,str可以是具体的一个字符串,也可以是表中的列

 

1.查看字符串“中国人”有几个字(后面为常量from可省略

select char_length('中国人');

 

 

2.学生表中姓名为 三个字 的学生有哪些?

 

select * from stu where char_length(sname)=3;

 

select * from stu where sname like '___';

 

有些需求仅靠SQL语句提供的功能无法实现,必须依靠数据库提供的函数

2.concat(str1,str2,……)拼接  把参数str1和str2拼接成一个字符串 班级+姓名

把参数str1和str2拼接成一个字符串

1.把‘我是’和‘中国人’拼接成一句话

select concat('我是','中国人');

 

 

2.学生表打印已分班的学生姓名和班级,以xxx是x班 的形式打印结果

select concat(sname,'是',cno,'班') 名称表from stu where cno is not null;

 

 

3.substr(str,pos,len)截取 把参数str字符串从第pos位起,截取len位

把参数str字符串从第pos位起,截取len位 字符串 姓氏

 

1.把‘我是中国人’字符串从第3位起截取3位字符

 

select substr('我是中国人',3,3);

 

 

二班的同学 都有什么姓氏? (截取第一个字段)  二班同学的姓氏

select substr(sname,1,1) from stu where cno=2;

 

4.)MySQL 数值 四舍五入 函数round(num,n),数字 和 身高体重bmi值

 

四舍五入不要小数缺省为正数  0

对数字num进行四舍五入运算,从第n位小数算起(保留几位)

 

1.)15.5469,保留2位小数,从第2位小数进行四舍五入运算

select round(15.5469,2);

 

 

 

2.)计算肥胖学生 许褚 的BMI值,四舍五入保留2位小数,体重/身高^2

 

select round(weight/(height/100*height/100),2) from stu where sname='许褚';

 

5.)MySQL 日期 函数year(date1)  month(date1)

year(date1)

获取日期date1的年份

select year(2019-11-27 09:00:00);

 

month(date1)

获取日期date1的月份

 

1.学生表中哪些同学是1990年出生的?

select * from stu where year(birth)=1990;

 

 

2.学生表中哪些同学是8月出生的?

select * from stu where month(birth)=8;

 

 

6.)计算  时间curdate datediff(date1,date2)  计算年龄 生日 小于23岁

curdate()获取当前日期

curtime()获取当前时间

now()获取当前的日期和时间

datediff(date1,date2)返回date1和date2两个日期间  隔的天数

 

1.计算2018年6月1日和2018年元旦之间间隔的天数

select datediff('2018-6-1','2018-1-1');

 

select datediff('2019-11-29','2015-10-20');   和晓静差1501天

 

 

2计算学生表中学生的年龄,显示姓名,生日,年龄(保留2位小数),只显示小于23岁的同学

select sname,birth,round(datediff(now(),birth)/365,2) from stu where round(datediff(now(),birth)/365,2)<23;

 

7.MySQL  条件判断函数 if(expr,v1,v2)  分数  姓名复姓

if(expr,v1,v2)如果表达式expr成立,返回v1值  否则,返回v2值

 

1..如果学生高考分大于等于520,其为统招生,否则其为委培生,从学生表中查找,显示姓名,考分,类型(统招或委培

 

select sname,score,if(score>=520,'统招','委培') 类型 from stu;

 

 

 

 

2.新来的学生都姓什么,需要考虑复姓(诸葛、太史、夏侯)和外号(大乔、小乔)?

select sname,substr(sname,if(sname in ('大乔','小乔'),2,1),if(substr(sname,1,2) in ('诸葛','太史','夏侯'),2,1)) 姓 from stu;

先从外号中筛选出大乔小乔,选出乔姓,然后截取两位名字,如果是诸葛,夏侯,太史截取两位,其他的就截取一位。

 

8.)MySQL CASE运算符 多重条件判断 考分是700优秀 600良好

CASE运算符为SQL语句增加了多重条件判断比if函数更加灵活

case when expr1 then v1 [when expr2  v2 then] …… else vn end

 

1.如果考分700以上,优秀,600以上,良好,520以上,中等,否则,较差,按照这个原则列出学生表中的学生,显示姓名,考分,和评判等级

select sname,score,(case when score>=700 then '优秀' when score>=600 then '良好' when score>=520 then '中等' else '较差' end) 等级 from stu;

 

9.)MySQL 空值处理函数 ifnull  isnull 显示未分班的同学

空值问题:

使用in时,值列表中有null值,不会返回null相关结果

select * from stu where cno in (2,null);

 

使用not in列表中有空值时,无查询结果返回

select * from stu where cno not in (2,null);  

 

有时空值会造成意想不到的问题,需要用空值函数先对空值进行处理

常用空值处理函数

ifnull(v1,v2) 如果v1为空返回v2,否则返回v1

isnull(expr) 如果表达式为null空值,返回1,表达式非空则返回0

 

1.仅显示2班和没有分班的同学

select * from stu where cno=2 or cno is null;

 

select * from stu where cno=2 or ifnull(cno,0)=0;

 

select * from stu where ifnull(cno,0) in (2,0);

 

select * from stu where isnull(cno)=1 or cno=2;

 

10.)MySQL 聚合函数 max最大 min最小 sun求和 avg平均 coun行的数量t

聚合函数

max(列名)

统计出列中所有中的最大值,列的数据类型可以是数值、字符、日期型

min(列名)

统计出列中所有中的最小值,列的数据类型可以是数值、字符、日期型

sum(列名)

统计出列中所有行中数值总和列的数据类型不能是字符型

avg(列名)

统计出列中所有行中数值的平均值,列的数据类型不能是字符型

count(列名)

统计出列中所有行的数量列中的如果有空值不会被统计计数

 

 

1.找出学生中最高的身高、最轻的体重、平均高考分数、学生的总数

select max(height),min(weight),sum(score)/count(*),avg(score),count(*),count(sno),count(cno) from stu;

 

注意:列中有空值时不会被count函数统计计数  只有一行数据结果

 

2.用一个查询语句找出学生中  最低的身高、再显示所有人的姓名

select min(height),sname from stu;

 

查询语句报错了:min(height)只有1个值1行,sname有20行,1行对接20行是个矛盾的事情,因此不能这么写

select min(height),group_concat(sname) from stu;

 

注意:group_concat也属于一种聚合函数,此列中把20个人的名字(20行),用逗号分隔连成一个字符串(1行),这样就不会报错了。

3.)SELECT语句  DISTINCT关键字  表 列 的别名

1.)ditinct查询出指定的1个或多个字段的不重复记录  班级号 性别

1.查询出学生表中都有哪些班号,要求去除重复班号

select distinct cno from stu;

 

 

2.列出学生表中 不重复的 班号和性别

select distinct cno,sex from stu;

 

注意:distinct关键字必须放在第一列,后续的1个或多个列作为去重列

 

select distinct sname,cno,sex,weight from stu;

 

2.)MySQL 列 表 的别名  表头用对应的中文显示 姓名 生日

列别名:给列起个额外的名称用来替代列原来的名称

select sname [as] 姓名 from stu;“as”可写可不写

 

表头用对应的中文显示

1.列出2班的学生姓名,性别,生日。

select sname as 学生姓名,sex 性别,birth 生日 from stu where cno=2;

如果别名中有空格,或者别名是SQL保留字(如:select,from,where)别名要用双引号“”括起来,否则报错

 

 

表的别名

表别名:给表起个额外的名称用来替代表原来的名称

select s.sname,s.sex from stu as s;“as”可写可不写

 

 

1.列出2班的学生姓名,性别,生日,查询语句使用表别名来引用列名

select s.sname,sex,s.birth from stu s where s.cno=2;重点是from后面的内容。

 

注意:多表连接查询往往经常使用表别名来区分不同表 确名字相同的列;

如果表名很长使用表别名会使查询语句看起来比较简洁;

在数据库图形管理工具中书写查询语句时使用表别名,键入“表别名.列名”时,会出现下拉列表选择框,将大大提高工作效率r

4.select 内容 from表order  by  子句

对查询结果集按照order by后面指定的1列或多列排序

 

分为增序和降序

增序a's'c,默认可以不写

降序 de's'c

 

对于数值,增序是从小到大,降序是从大到小

对于日期和时间,增序是从远到近,降序是从近到远

对于英文字符,增序是从a到z,降序是从z到a

对于中文字符,增序按照字符集编码从小到大,降序按照字符集编码从大到小,如果选择gbk编码可以按照拼音来排序

 

对于排序列的名称,可以用以下方式

列名、列别名、列的序号、函数、表达式等

 

1.按照体重增序列出学生信息

select * from stu order by weight;

 

2.展示已分班学生信息,先按照班号增序,再按照考分降序排列

select * from stu where cno is not null order by cno,score desc;

 

3.按照拼音降序排列所有学生

注意:

由于汉字在utf8编码中不是按照拼音顺序排列的,需要用到convert函数转换列sname的编码到GBK(国标库);如果表列为gbk编码不需要

 

select * from stu order by convert(sname using gbk) desc;

 

 

4.显示学生性别,姓名,生日3列信息,先按第1列,再按第3列降序排序

select sex,sname,birth from stu order by 1,3 desc;

 

 

5.按照班号增序排序,没有分班的同学排在后面

select * from stu order by isnull(cno),cno;

 

所有的不是空值的返回零排在了前面,后面空值返回一排在了后面

 

6按照《关张赵马黄》的顺序排序2班同学

select * from stu where cno=2 order by (case when substr(sname,1,1)='关' then 1 when substr(sname,1,1)='张' then 2 when substr(sname,1,1)='赵' then 3 when substr(sname,1,1)='马' then 4 when substr(sname,1,1)='黄' then 5 else 6 end);

 

5.SELECT - LIMIT 子句

SELECT语句中的LIMIT子句最后执行

其作用是仅显示查询结果集中的部分内容

1.显示stu表中考分最高的3名学生

select * from stu order by score desc limit 3;

 

select * from stu order by score desc limit 0,3;  

 

#limit 0,3中的0为第1条记录,如:limit 5,3意思为从结果集的第6条起,显示3条记录。简单理解:第一个参数代表起始行(参数值+1)第二个参数代表行的跨度数

 

比如1,3就不一样了,1,3代表从第2位开始截取3位,0代表第一位。

 

6.面试题alter 和 delete有什么区别?alter 和 update有什么区别?

alter 和 delete有什么区别?

*alter属于DDL语句

*alter改变表的结构

 

* delete属于DML语句

* delete不会改变表的结构

* delete删除行

 

alter 和 update有什么区别?

*alter属于DDL语句

*alter改变表的结构

 

* update属于DML语句

* update修改现存行的信息

* update不会改变表的结构

你可能感兴趣的:(数据库函数 select 查询语句的分类 语法结构 多表连接,DISTINCT关键字 表 列 的别名和mysql 常用的 字符串 数值 日期 条件判断 CASE 空值 聚合 关键字 列的别名函数和select 内容 from表order by 子句 LIMIT 子句)