mysql语法总结day1

day 1:
1、基础查询
1)、% ----> 表示取余操作
2)、select version(); ----->查询当前mysql版本
3)、as 或者空格 -----> 给当前字段取别名
select xxx as xx from …
4)、如果别名字段中要求有空格,则需要在别名字段前后加上“ ”
SELECT salary AS “out put” FROM employees;
5)、在查询结果中去重使用关键字distinct
select distinct departmenr_id from employee
6)、+号的作用
仅仅只有运算符的功能(没有字符串拼接功能)
select 100+90; ----> 190 两个操作数都为数值型的时候,就做加法运算
select ‘123’+90; ----> 213 其中一方不为数值型的时候将其转换为数值进行运算
select ‘Join’+90 -----> 90 如果一方无法转换为一个数值,则其专户那结果为0
select null+0 -----> null 如果其中一方为null,那么结果肯定为null
7)、IFNULL函数的使用
IFNULL(commission_pct,0) as xxx …
如果‘commissio_pct’字段为null,那么将它当做0处理,否则就是原来的数据
2、条件查询
select
查询列表 —step3
from
表名 —step1
where
筛选条件; —step2

1)、按条件表达式进行筛选
条件运算符:>、<、=、!=(相当于<>)、>=、<=
2)、按逻辑表达式筛选
作用:用于连接条件表达式
逻辑运算符: &&、||、!
and、or、 not
3)、模糊查询
a. like 一般和通配符搭配使用:%代表任意多个字符,包括零个字符
代表任意一个字符
\用来转义 用escape关键字来自定义转义符号
select xxx from xxx where xxx LIKE '
KaTeX parse error: Expected group after '_' at position 1: _̲%' escape '’;
这里的$便是转义符号
b. between… and…
可以提高代码的简洁性,包含两个临界值,两个临界值不能调换顺序
c. in
判断某字段的值是否属于in列表中的某一项
in列表中的值的类型必须统一,或者必须兼容,并且不支持使用模糊匹配中所使用的通配符
d. is null
=或者!=不能用来判断null的值
is null 和 is not null用来判断null的值
<=>安全等于可以用来判断当前值为null
but be careful! the <!=> is wrong!
二者区别
is null:仅仅可以判断null值,可读性较高
<=> :既可用于判断null值,又可以判断普通的数值,不过可读性较低
3、查询排序
select 查询列表 —>step3
from 表 —>step1
【where 筛选条件】 —>step2
order by 排序列表 [asc(默认) | desc] —>step4
1)、asc代表升序,desc代表降序,如果不写的话默认是升序;
2)、order by子句中可以支持单个字段,多个字段、表达式、函数、别名;
3)、order by子句一般是放在查询语句的最后面,但是limit子句除外,limit放在order by之后;
4)、limit (start,count);其中start表示从结果的第几条记录开始,count表示一共查询多少条记录;
4、常见函数(函数间可以嵌套)
1)、单行函数
a. 字符函数
1. LENGTH 获取参数值的字节个数
select LENGTH(‘john’); ---->4
select LENGTH(‘张三’); ---->6(UTF-8编码)
查看当前使用的字符集
show variables like ‘%char%’;
2. CONCAT 拼接字符串
CONCAT(last_name,’_’, first_name) AS 姓名 …
3. upper,lower
SELECT UPPER(‘john’);
SELECT LOWER(‘Hello’);
4. substr、substring 注意,sql语言索引从1开始
5. instr 获取子串第一次出现的索引,如果找不到,返回-1
6. trim 默认是去掉两端空格,去掉指定字符使用 from
SELECT TRIM(‘aa’ FROM ‘aaaaaa张aaaaaaaa翠山aa’) AS out_put;
7. lpad 用指定字符实现左填充指定长度
SELECT LPAD(‘殷素素’,2,’-’) AS out_put; #殷素
SELECT LPAD(‘殷素素’,5,’-’) AS out_put; #–殷素素
8. rpad 用指定字符实现右填充指定长度
SELECT RPAD(‘殷素素’,2,’-’) AS out_put; #殷素
SELECT RPAD(‘殷素素’,5,’-’) AS out_put; #殷素素–
9. replace 字符串的替换
b. 数学函数
1. round 四舍五入
SELECT ROUND(1.4567,2); #1.46 保留小数点后两位
SELECT ROUND(-1.55); #-2
2. ceil 向上取整 返回>=该参数的最小整数
SELECT CEIL(-1.11); #-1
SELECT CEIL(12.56); #13
3. floor 向下取整,返回<=该参数的最大整数
SELECT FLOOR(-9.99); #-10
4. truncate 截断,返回保留小数点后n位
SELECT TRUNCATE(1.6999,2); #1.69
5. mod 取余,被除数为正则为正,被除数为负则为负
mod(a,b) : a-a/bb
mod(-10,-3) : -10- (-10)/(-3)
(-3)
SELECT MOD(10,3); #1,相当于% :a-a/bb(表示整除取商)
c. 日期函数
1. now() 返回当前系统日期+时间
select now();
2. curdate() 返回当前系统日期,不包含时间
select curdate();
3. curtime() 返回当前时间,不包含日期
select curtime();
4. 可以获取指定的部分,年,月,日,小时,分钟,秒
year(字符串参数),month(字符串参数)
day(字符串参数),dayname(字符串参数)—>获取的是星期几
hour(字符串参数),minute(字符串参数)
second(字符串参数)
5. str_to_date 将日期格式的字符转换成指定格式的日期
SELECT STR_TO_DATE(‘22:13:20 1998/3/4’,’%H:%i:%s %Y/%m/%d’) AS ‘date’; #1998-03-04 22:13:20
6. date_format:将日期转换为字符
SELECT DATE_FORMAT(‘2018/6/6’,’%Y年%m月%d日’); #2018年06月06日
d. 流程控制函数
1. if函数
SELECT IF(10<5,‘大’,‘小’);
2. case函数的使用一:switch case的效果
case 要判断的字段或者表达式
when 常量1 then 要显示的值1或者语句1;
when 常量2 then 要显示的值2或者语句2;

else 要显示的值n或者语句n
end
#-------------------------example-----------------------
SELECT
salary AS 原始工资,
department_id,
CASE department_id
WHEN 30 THEN salary
1.1
WHEN 40 THEN salary1.2
WHEN 50 THEN salary
1.3
ELSE salary
END AS 新工资
FROM
employees
#------------------------------------------------------------
case函数的使用二:类似于 多重if
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
。。。
else 要显示的值n或语句n;
#------------------example-----------------------------
SELECT
salary,
CASE
WHEN salary>20000 THEN ‘A’
WHEN salary>15000 THEN ‘B’
WHEN salary>10000 THEN ‘C’
ELSE ‘D’
END
AS 工资级别
FROM
employees;
#------------------------------------------------------------
2)、分组函数
功能:用作统计使用,又称为聚合函数或者统计函数或是组函数
分类:sum求和,avg平均值,max最大值,min最小值,count计算个数
特点:
1、sum,avg一般用于处理数值型数据;
max,min,count可以用于处理任何类型;
2、以分组函数都将忽略null值进行处理;
3、可以和distinct搭配使用实现去重运算;
4、count函数的单独使用一般使用count()统计行数
5、和分组函数一同查询的字段要求是group by后的字段,其他的都不行
datediff(date1,date2);参数为两个日期型数据,查询结果为date1比date2多的天数;
5、分组查询
group by子句语法—>可以使用Group By子句将表中的数据分成若干组
select column,group_function(column)
from table
[where condition]
[group by group_by_expression] [having condition]
[order by column];
如果要对原来不存在表中的字段进行筛选的话使用having关键字+查询条件
总结:
1、分组查询的筛选条件可以分为两类
数据源 位置 关键字
分组前筛选 原始表 group by子句的前面 where
分组后筛选 分组后的结果表 group by子句的后面 having
1)、分组函数做条件肯定是放在having子句中
2)、能用分组前筛选的优先使用分组前筛选
2、group by子句支持单个字段分组,也支持多个字段分组(多个字段之间用逗号隔开没有顺序要求)
3、也可以添加排序(排序放在整个分组查询的最后)
6、连接查询
6.1、笛卡尔积(内连接)
笛卡尔乘积现象:加入表1 有m行,表2有n行,结果=m
n行
发生原因:没有有效的匹配条件
如何避免:添加有效的连接条件
6.2、连接的分类
分类:
按年代分类:
sql92标准:仅仅支持内连接
sql99标准【推荐】:支持所有的内连接+外连接(保护支持全外)+交叉连接
按功能分类:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接
右外连接
全外连接
交叉连接
6.3、等值连接
1、多表等值连接的结果为多表的交集部分
2、n表连接,至少需要n-1个连接条件
3、多表的顺序没有要求
4、一般需要为表起别名
5、可以搭配前面介绍的所有子句使用,比如排序、分组、筛选
#案例:查询员工名部门名和所在的城市
SELECT last_name,department_name,city
FROM employees e,departments d,locations l
WHERE e.department_id=d.department_id
AND d.location_id=l.location_id
AND city LIKE ‘s%’
ORDER BY department_name ASC;
6.4、非等值连接
#案例1:查询员工的工资和工资级别
SELECT salary,grade_level
FROM employees e,job_grades g
WHERE salary BETWEEN g.lowest_sal AND g.highest_sal
AND g.grade_level=‘A’;
在这里插入图片描述
6.5、自连接在这里插入图片描述
select employees_id,last_name,manager_id
from
employees;在这里插入图片描述
SELECT e.employee_id,e.last_name,m.employee_id,m.last_name
FROM employees e,employees m
WHERE e.manager_id=m.employee_id;
在这里插入图片描述
#########################
day 1、总结
排序
一、语法
select 查询列表
from 表
where 筛选条件
order by 排序列表【asc|desc】
二、特点
1、asc:升序,如果䘏默认升序
desc:降序
2、排序列表 支持单个字段、多个字段、函数、表达式、别名
3、order by的位置一般放在查询语句的最后(除limit语句之外)
常见函数:
一、概述
功能:类似于java中的方法
好处:提高重用性和隐藏实现细节
调用:select 函数名(实参列表);
二、单行函数
1、字符函数
concat : 连接
substr : 截取子串
upper : 变大写
lower:变小写
replace:替换
length:获取字符串长度
trim:去前后空格
lpad:左填充
rpad:右填充
instr:获取子串第一次出现的索引
2、数学函数
ceil:向上取整
round:四舍五入
mod:取模
floor:向下取整
truncate:截断
rand:获取随机数,默认返回的是[0,1)之间的一个小数
3、日期函数
now:返回当前日期+时间
year:返回年
month:返回月
day:返回日
date_format:将日期转换成字符
curdate:返回当前日期
str_to_date:将字符转化为日期
curtime:返回当前时间
hour:小时
minute:分钟
second:秒
datediff:返回两个日期相差的天数
monthname:以英文形式返回月
4、其他函数
version:当前数据库服务器的版本
datebase:当前打开的数据库
user:当前用户
password(“字符”):返回该字符的密码形式
MD5(“字符”):返回字符的MD5的加密形式结果
5、流程控制函数
1、if(条件表达式,表达式1,表达式2):如果条件表达式成立,返回表达式1,否则返回表达式2
2、case
情况a、
case 变量或表达式或字段
when 常量1 then 值1
when 常量2 then 值2

else 值n
end
情况b、
case
when 条件1 then 值1
when 条件2 then 值2

else 值n
end
三、分组函数
1、分类
max:最大值
min:最小值
sum:和
avg:平均值
count:计算个数
2、特点
a.语法
select max(字段) from 表名;
b.支持的类型
sum和avg一般用于处理数值型数据
max、min、count可以处理任何数据类型
c.以上分组函数都忽略null
d.都可以搭配distinct使用,先去重的统计
select sum(distinct 字段) from 表;
e.count函数
count(字段);统计该字段非空值的个数
count();统计结果集的行数
案例:查询每个部门的员工个数
select count(
)
from employees
group by department_id;
count(1):统计结果集的行动
效率上:
MyISAM,count()最高
InnoDB存储引擎,count(
)和count(1)效率>count(字段)
f.和分组函数一同查询的字段,要求是group by后出现的字段
四、分组查询
1、语法
select 分组函数,分组后的字段··················step5
from 表··················································step1
[where 筛选条件]·····································step2
group by分组的字段·································step3
[having 分组后的筛选]······························step4
[order by 排序列表]··································step6
注意:
在mysql中除了order by、select中支持别名,在group by以及having中也支持别名(但是不推荐)
但是在Oracle、SQLServer中不支持在group by和having中使用别名
2、特点
使用关键字 筛选的表 位置
分组前筛选 where 原始表 group by前面
分组后筛选 having 分组后的表 group by后面
五、连接查询
1、含义
当查询中涉及到了多个表的字段,需要使用多表连接
select 字段1,字段2
from 表1,表2…;
笛卡尔乘积:当查询多个表时,没有添加有效的连接条件,到值多个表所有行实现完全连接
如何解决:添加有效的连接条件
2、分类
按年代分类:
sql92:
等值
非等值
自连接

       	         也支持一部分外连接(用于Oracle、sqlserver,mysql中不支持)
       	    sql99【推荐使用】:
       	         内连接
       	         		等值
       	         		非等值
       	         		自连接
       	         外连接
       	                左外
       	                右外
       	                全外(mysql不支持)
       	          交叉连接
  3、sql92语法
      1、等值连接
      语法:
          select 查询列表
          from 表1 别名,表2 别名
          where 表1.key=表2.key
          [and 筛选条件]
          [group by 分组字段]
          [having 分组后的筛选]
          [order by 排序字段]
        特点:
          a. 一般会为表起别名
          b. 多表的顺序可以调换
          c. n表至少需要n-1个连接条件
          d. 等值连接的结果是多表的交集部分
      2、非等值连接
      	语法:
        select 查询列表
          from 表1 别名,表2 别名
          where 非等值的连接条件
          [and 筛选条件]
          [group by 分组字段]
          [having 分组后的筛选]
          [order by 排序字段]
      3、自连接
      语法:
          select 查询列表
          from 表 别名1,表 别名2
          where 非等值的连接条件
          [and 筛选条件]
          [group by 分组字段]
          [having 分组后的筛选]
          [order by 排序字段]
          [limit 显示行数]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值