SQL第1/n篇(持续更新中)DQL基础查询语句

PS:绝不眼高手低,从基础做起。咱也不知道sql语句写在哪里,就直接用代码块呈现了,这样看起来方便一些。
(1)先来讲一些注意事项:
选中Fn+F12格式化。选中Fn+F9执行。";"分割语句。双击字段快捷输入,这样输入时字段是着重号引起来。着重号一般用来区分是字段还是关键字,是关键字的时候引起来,不是的时候可不用(手打时)。
(2)表中字段含义:


表中字段含义.png

进阶一 查询

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

#选用操作的库
USE `myemployees`;
#显示表的结构
DESC `departments`;

#1.查询字段
#连接字符串用concat
SELECT 
  CONCAT(`last_name`, '-',`first_name`) AS 姓名 
FROM
  `employees` ;
#去重 在一次执行中只能去一个字段的重
SELECT DISTINCT `department_id` FROM `employees`;

#有null值返回指定值,不是null值显示原值
SELECT `last_name`  姓,IFNULL(`commission_pct`,0) AS 奖金率
FROM `employees` 

#2.查询常量值

SELECT '粉红狐狸'; #字符型和日期型要用单引号引起来,数值型不需要
SELECT '100';
SELECT 100;

#3.查询表达式

SELECT 100%98 AS 取模;  
SELECT 100%98 余数;#取别名可以用空格
SELECT 100%98 AS "out put";#别名为关键字建议双引号引起来,单引号也可以
#4.查询函数

SELECT VERSION();

#5.+在Mysql中只有一个功能:运算符

SELECT 99+1; #两个都是数值
SELECT '98'+1; #能转换成数字的字符,试图转换成数字,再运算
SELECT '粉红狐狸'+1;#不能转换成数字的字符,转换成0,再运算
SELECT  NULL+1;#只要有null结果就是null

进阶二 条件查询

语法:select 查询列表 from 表 where 筛选条件
执行过程:先查表,再看条件,再查询
条件分类:
1、条件表达式:< > != <> (又大于又小于就是不等于,推荐写这个)<= >=
2、逻辑运算符(用于连接条件表达式):&& || !,推荐写 and or not
3、模糊查询:
like :与通配符搭配查询字符型或者数值型都可以,%任意多个字符,说不清是什么字符,包含0个字符 _只匹配一个字符 。 (如果字段里有null值,like+通配符是无法匹配的)
between and :取值区间[<= ,>=]
in|not in : 判断字段是否在in的列表里,不支持通配符查询,因为in等价于==
is null | is not null :只能判断null值

#案例1:查询工资在1万到2万之间的员工姓名,工资,奖金
SELECT `last_name` ,`salary` ,`salary`*12*IFNULL(`commission_pct`,0) AS 奖金
FROM `employees`
WHERE `salary` >=10000 AND `salary`<=20000;

SELECT `last_name` ,`salary` ,`salary`*12*(1+IFNULL(`commission_pct`,0)) AS 年薪
FROM `employees`
WHERE `salary` BETWEEN 10000 AND 20000; #between and 包含端点值,临界值顺序不能颠倒

#案例2:查询员工姓名中包含字符a的员工信息
SELECT * FROM employees WHERE last_name LIKE '%a%';

#案例3:查询员工姓名中第二个字符为"_"的员工信息
SELECT * FROM employees WHERE last_name LIKE '_\_%';
SELECT * FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';#escape 表示后面的字符是转义字符,$可任意

#案例4:查询工种编号为AD_PRES,AD_VP,IT_PROG的员工姓名和工种编号
SELECT last_name,job_id FROM employees WHERE job_id  IN ('AD_PRES','AD_VP','IT_PROG');

#查询工种编号不为‘IT’的员工信息
SELECT * FROM employees WHERE job_id <> 'IT' ;#不能用is not 

#案例5:查询有奖金的员工姓名和奖金率
SELECT last_name ,`commission_pct` FROM employees WHERE `commission_pct`IS NOT NULL;#= 或者<> 不能去判断null值

#案例6:查询没有奖金的员工姓名和奖金率 安全等于<=>  等价于==
SELECT last_name ,`commission_pct` FROM employees WHERE `commission_pct` <=> NULL;
SELECT last_name ,salary FROM employees WHERE salary <=> 12000;
/* 
is null:只能判断是否等于null值,可读性高
   <=> :既能判断是否是null值,也能判断普通值,但可读性差,建议用is null     
*/

进阶三 排序 order by 放在最后面

语法:select 查询列表 from 表 where 条件 order by 排序列表 【asc|desc】
执行顺序:从哪个表筛选什么条件,再去查找,最后排序
特点:默认升序asc

#案例1.查询部门编号>90,按照入职时间先后顺序进行排序
SELECT * FROM employees WHERE `department_id`>90 ORDER BY `hiredate`;#时间早的值较小

#案例2.查询员工信息,按照入职时间先后顺序、月薪和姓名长度降序、进行排序【怎么只能有两个排序字段?第三个不管用了呢】
SELECT `last_name`,`hiredate`,`salary`,LENGTH(last_name) 姓名长度 
FROM employees  
ORDER BY `hiredate` ASC ,`salary` DESC,姓名长度  DESC;

进阶四 函数

函数分为单行函数,聚合函数(统计函数)
1、单行函数:给一个值返回一个值
2、统计函数:给多个值返回一个值(下一篇更新)

一、单行函数

1.1字符型函数
#length :获取参数值的字节个数(不是字符个数)在utf8中汉字占3个字符,在jbk中汉子占两个字符;英文字母均占一个字符
SHOW VARIABLES LIKE '%char%' #看字符集
SELECT LENGTH('粉红狐狸');

#concat : 拼接字符串
SELECT CONCAT('粉红狐狸','_','最好看');

#upper、lower : 全部变成大写、小写
SELECT  CONCAT(UPPER(last_name),'_',LOWER(first_name)) FROM employees;

#substr | substring : 截取字符串 索引从1开始
#一个数值参数时,返回从开始索引的位置到最后
SELECT SUBSTR('乘风破浪的小姐姐',6);#返回“小姐姐”
#两个数值参数时,返回从开始索引的位置,指定字符长度的子串
SELECT SUBSTR('乘风破浪的小姐姐',1,4);#返回“乘风破浪”
#案例:首字母大写,其余小写,下划线拼接
SELECT  CONCAT(UPPER(SUBSTR(last_name,1,1)),
           LOWER(SUBSTR(last_name,2)),
           '_',
           LOWER(first_name)
           ) FROM employees;

#instr :返回在字符串中第一次出现的索引,找不到返回0
SELECT INSTR('红色高跟鞋','高跟鞋') #返回3

#trim去掉前后空格,或者去掉前后的指定字符
SELECT LENGTH(TRIM('   杨幂  ')); #2*3=6
SELECT TRIM('a' FROM 'aaaaaaaa杨aaaa幂aaaa')#若为aa 则以aa为单位进行匹配

#lpad left_pad | rpad right_pad : 参数代表总长度,原有数值的个数超过指定长度从右边截断
SELECT LPAD('杨幂',10,'*') AS result

#replace : 凡是能够匹配上的都替换掉
SELECT REPLACE('周芷若周芷若张无忌爱上了周芷若','周芷若','赵敏') result
 
1.2 数学函数
#round : 四舍五入
SELECT ROUND(-1.55); #先计算正数的四舍五入值,再加符号
SELECT ROUND(-1.567,2); #四舍五入,小数点保留2位

#ceil :向上取整,返回>=该参数的最小整数
SELECT CEIL(-1.01);

#floor : 返回<=该参数的最大整数
SELECT FLOOR(-1.01);

#truncate :截断,第二个参数表示小数点后保留的位数
SELECT TRUNCATE(1.79999,1)

#mod : 取余 符号看被除数 10%3 看10
/* 
a-a/b*b java中除法左右两边都是整数取整
mod(-10,-3) : -10 - (-10)/(-3)*(-3)
mod(10,-3) : 10 - (10)/(-3)*(-3)
*/
SELECT MOD(-10,-3)
SELECT MOD(10,-3)
SELECT -10/-3
1.3 日期函数
日期的符号.png
SELECT NOW(); #日期+时间
SELECT CURDATE(); #日期
SELECT CURTIME(); #时间
#可以获取年、月、日、时、分、秒
SELECT MONTH(NOW());
SELECT MONTHNAME(NOW()); #英文的月份

#将字符串转换成日期 
SELECT STR_TO_DATE('1996-5-15','%Y-%c-%d')
#在一定的业务场景下使用解析用户返回给的日期字符串
SELECT * FROM `employees` WHERE `hiredate`=STR_TO_DATE('4-3 1992','%c-%d %Y');

#date_format 将日期转换成字符
SELECT DATE_FORMAT(NOW(),'%y年-%m月-%d日') result;
1.4其他函数
SELECT VERSION();
SELECT DATABASE();
SELECT USER();
1.5 流程控制函数
#if函数
SELECT 
  last_name,
  commission_pct,
  IF(
    commission_pct,
    '有奖金 嘻嘻',
    '没奖金 呵呵'
  ) AS 备注 
FROM
  employees 
  
#case使用一  case后面加字段,功能相当于等于的判断,when后面加的是常量
  /*
case 需要判断的字段或表达式
when 常量1 then 要显示的值1或者语句1
when 常量2 then 要显示的值2或者语句2
...
else 要显示的值n或者语句n(默认)
end

搭配select时 case-end充当的是表达式,then后面显示的是值
*/

/*案例:查询员工的工资,要求:
部门号=30,显示的工资为1.1倍
部门号=40,显示的工资为1.2倍
部门号=50,显示的工资为1.3倍
其他部门,显示的工资为原工资
*/
SELECT 
  last_name,
  department_id,
  salary,
  CASE department_id
    WHEN  30 THEN salary * 1.1 
    WHEN  40 THEN salary * 1.2 
    WHEN  50  THEN salary * 1.3 
    ELSE salary 
   END AS 工资 
 FROM
   employees 
    
#case使用二  case后面不加东西,判断的条件在when后面写,相当于是区间的判断
/*
case 
when 条件1 then 要显示的值1或者语句1
when 条件2 then 要显示的值2或者语句2
...
else 要显示的值n或者语句n(默认)
end

搭配select时 case-end充当的是表达式,then后面显示的是值
*/

/*案例:查询员工的工资,要求:
工资>20000,显示级别A
工资>15000,显示级别B
工资>10000,显示级别C
否则,显示级别D
*/

SELECT 
  last_name,
  department_id,
  salary 原工资,
  CASE 
    WHEN  salary>20000 THEN 'A' 
    WHEN  salary>15000 THEN 'B'
    WHEN  salary>10000 THEN 'C' 
    ELSE 'D'
   END AS 工资级别 
 FROM
   employees 
   

总结 单行函数

字符函数

length , concat , substr , instr , trim ,
upper , lower , lpad , rpad , replace

数学函数

round , ceil , floor, truncate, mod

日期函数

now , curdate, curtime ,
year , month, monthname, day, hour, minute, second
str_to_date , date_format

其他函数

version , database, user

控制函数

if , case

二、分组函数 :用来统计

分类:sum avg min max count
特点:
1.sum avg :只处理数值型 min max count:可以处理任何类型
2.以上函数都忽略null值。
3.可以和dinstinct搭配 去重
4.count 的详细用法
count(*),count(1)表的统计行数,一般使用count(*)
5.和分组函数一同查询的字段,要求是出现在group by 后的字段
因为分组函数只返回一个值,加上其他字段,返回的数据表不规范
select sum(salary),last_name from 表 这样是不可以的,sum只返回一个值,但last_name有多个值

SELECT SUM(DISTINCT salary), SUM(salary) FROM employees
SELECT DATEDIFF(NOW(),'1996-06-30') 地球居住天数;

参考来源:https://www.bilibili.com/video/BV12b411K7Zu?from=search&seid=14676118147617784537

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,671评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,442评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,524评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,623评论 1 275
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,642评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,584评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,953评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,621评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,865评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,608评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,698评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,378评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,958评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,940评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,173评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,419评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,425评论 2 342