SQL语句知识点梳理——查询语句

一、常用命令

  1. 查看当前所有的数据库:show databases;

  2. 打开指定的库:use 库名;

  3. 查看当前库的所有表:show tables;

  4. 查看其他库的所有表:show tables from 库名;

  5. 创建表:create table 表名(
                                 列名 列类型,
                                 列名 列类型,
                                 ......
    );
    
  6. 查看表结构:desc 表名;

  7. 查看服务器版本
    方式一:登录到mysql服务端:select version();
    方式二:没有登录到mysql服务端:mysql --version;或mysql --V;


二、DQL语言

1. 基础查询

  • ==语法==:select 查询列表 from 表名
  • ==特点==:查询结果可以是:表中的字段、常量值、表达式、函数查询的结果是一个虚拟的表格
1.查询单个字段:select XXX from XXX;

2.查询多个字段:select XXX,XXX,XXX from XXX ;可以双击左侧的字段就直接导入到命令行中,F12格式化格式。

3.查询所有字段:select * from XXX;

4.当查询的内容名称和关键字冲突时,可以用着重号区分,`XXX`

5.起别名:select XXX as X;

6.去重:当查询的结果中有重复的结果时,只希望显示共有哪几种:select distinct XXX from XXX

7.+号的作用:不能拼接字符,只有运算符的功能

8.concat(XXX,XXX,XXX)拼接操作,如果其中某一个为null,结果一定是null

9.ifnull(a,b)判断a是否为null,若是则返回b,否则返回本身。

2. 条件查询

  • ==语法==:select 查询列表 from 表名 where 筛选条件

    • 条件表达式查询:>,<,>=,<=,!=,=。

    • 逻辑表达式查询:&&,||,!。(and,or,not)

    • 模糊查询表达式查询:

      ①like:一般和通配符搭配使用,%表示任意多个字符,包含0个字符, _ 表示任意单个字符,如:查询包含e的元素,like %e%;如查询第三个字符为e,第五个字符为a: like '__e_a%',当下划线或者%需要使用时,可以通过转义符使用,\_ \%,或者 __%_ escape %,就表示把%当做一个转义符
      
      ②between and:between 100 and 120(包含临界值,等价于大于等于左边小于等于右边)
      
      ③in\not in:其中之一。示例: select job from employee where job in("doctor","teacher",...),in列表的值类型必须兼容,列表值里面不能用通配符
      
      ④is null:= 号运算符不能判断null值,所以用is null。is not null,非null。
      
      ⑤<=>:安全等于,判断是否等于,既可以判断数值,又可以判断null值。
      
      ⑥any\some 和子查询返回的某一个值比较,只要和其中一个比较满足条件,就看做满足条件,如15>any(10,20,30),满足条件
      
      ⑦all 和子查询返回的所有值比较,要满足和所有值比较,才看做满足条件
      

3. 排序查询

  • ==语法:==

    select 查询列表 from 表名 where 筛选条件 order by 排序列表 asc\desc(升序\降序)如果不写默认升序
    
    1. 按表达式排序,可以用 order by 别名,length(XXX)返回长度。

    2.  多重排序条件:select * from employee oder by salary desc,age asc,先按salary降序,再按age升序,又先后顺序
      

4. 常见函数

  • ==语法==:select 函数名(实参列表) [from 表]
4.1 单行函数
/*字符函数*/
1.length(param)获取参数值的字节个数;
2.concat()拼接字符串;
3.upper\lower(),变大写\小写;
4.substring\substr(str1,int strat,int b)截取字符,从start开始,长度为b;如果不加b就是截取至末尾。mysql中索引从1开始
5.instr(str1,str2)返回子串str2第一次出现在str1的索引,如果找不到返回0
6.trim(str1,str2)去掉str2前后的str1字符串。如果不加str1,就是去掉空格。
7.lpad(str1,int length , str2)用指定字符str2实现左边填充str1,填充后总长度为length
8.rpad(str1,int length , str2)用指定字符str2实现右边填充str1,填充后总长度为length
9.replace(str,str1,str2),用str2代替str中的str1
/*数学函数*/
1.round()四舍五入,round(x,n)四舍五入保留小数点后n位
2.ceil()向上取整
3.floor()向下取整
4.truncate(x,y),截断,小数点后保留几位(不进位,直接截断)
5.mod(x,y),x%y
/*日期函数*/
1.now()返回当前系统日期+时间
2.curdate()返回当前系统日期,不包含时间
3.curtime()返回当前时间,不包含日期
4.str_to_date(str,format)将字符转换为日期格式 str_to_date('4-3 1997','%m-%d %Y');
5.date_format()将日期转换为字符
6.datediff(time1,time2)返回time1-time2的天数
/*其它函数*/
1.version()
2.databases()
3.user()
/*流程控制函数*/
1.if(条件表达式,结果1,结果2),类似于三元运算符 expression?resutl1:result2
2.case的使用一 (相当于switch...case)如果都不满足,返回null
①
case 要判断的字段或表达式或变量
    when 常量1 then 要显示的值1或语句1;
    when 常量2 then 要显示的值2或语句2;
    ......
    else 要显示的值n或语句n;
end;

case的使用二,如果都不满足,返回null
②
case
    when 条件1 then 要显示的值1或语句1;
    when 条件2 then 要显示的值2或语句2;
    ......
    else 要显示的值n或语句n;
end;
4.2 分组函数
  • 用作统计使用
  • max\min\count可以处理任何类型,sum\avg一般处理数值型==,max,min,count不能出现在where后面==

5. 分组查询

  • ==语法==

    select 分组函数,列(要求出现在group by的后面) from 表 [where 筛选条件] group by 分组的列表 [having 分组条件] [order by 字句]
    
    select max(salary),job_id from employees group by job_id;/*查询每个工种的最高工资*/
    
    select count(*),department_id from employees group by department_id having count(*)>2;查询员工个数大于2的部门。用having追加筛选。
    
  • ==注意事项:==

    1. 分组前筛选:原始表,放在group by前面
    2. 分组后筛选:分组后的结果集,放在group by后面
    3. 分组函数做条件,肯定是放在group by后面,having...
    4. 能用分组前筛选的尽量用分组前筛选
    5. group by子句支持单个字段分组(多个字段之间用逗号隔开,没有顺序要求)

6. 连接查询

6.1 内连接
select 查询列表 from 表1 【别名】 inner join 表2 【别名】on 连接条件(等值连接、非等值连接、自连接)【where 筛选条件】【group by 分组】【having 条件】【order by 排序列表】
6.2 外连接

==特点==:外连接的查询结果为主表中的所有记录,如果从表中有和它匹配的,则显示匹配的值,反之显示null,外连接查询结果=内连接结果+主表中有而从表中没有的记录

左外:left join左边是主表右外:right join右边是主表

image-20200607211114028.png
image-20200607211125164.png

7. 子查询

  • 含义:出现在其他语句中的select语句,称为子查询或内查询。出现在外部的select查询语句,称为外查询或主查询。
  • ==select 查询出来的是一张表,所以即使只有一个数据,如果要判断数据是否在其中要用in而不是= 或!===
/*找到表中money不是最大值的其余项*/
SELECT * FROM account WHERE money NOT IN (SELECT MIN(money) FROM account)

8. 分页查询

  • 应用场景:当要显示的数据,一页没法全部显示时,需要分页提交sql请求,使多页显示。(如1-10,11-20....)

  • ==语法==

    select 查询列表 from 表【join type】 join 表2 on 连接条件 【where 筛选条件】【group by 分组字段】【having 分组后筛选】【order by 排序字段】
    limit offset,size;
    
    offset:要显示的条目的起始索引(索引从0开始)
    size:要显示的条目个数(不是结束索引,而是个数)
    limit语句放在最后
    

9. 联合查询

  • ==语法==:

    查询语句1 
    union 
    查询语句2 
    union....
    查询语句n
    
  • 注意事项

    1. ==union会自动去重==。如果不想去重,使用关键字==union all==
    2. 每个子句使用了==oder by,union==联合多个子句,要求==多个子句必须加上括号==,但这样仍然无法==得到每个子句排序后再叠加到一起的效果==,因此还必须==指定每个子句一个limit==。才能达到效果。参考
    (SELECT * FROM sc sc1 WHERE sc1.`C` = '01' ORDER BY sc1.`score` DESC LIMIT 10 )
    UNION ALL
    (SELECT * FROM sc sc2 WHERE sc2.`C` = '02' ORDER BY sc2.`score` DESC LIMIT 10 )
    UNION ALL
    (SELECT * FROM sc sc3 WHERE sc3.`C` = '03' ORDER BY sc3.`score` DESC LIMIT 10 )
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352