数据库函数 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 查询语句
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不会改变表的结构