建设项目信息类网站,进出口网站贸易平台有哪些,怎么样更好的做网站,深圳做企业网站哪家好数据表
链接#xff1a;https://pan.baidu.com/s/1dPitBSxLznogqsbfwmih2Q 提取码#xff1a;b0rp --来自百度网盘超级会员V5的分享
sql的执行顺序 根据顺序 也就是说 select后面的字段别名 只能在order by中使用 mysql不支持sql92的外连接
mysql不支持满外连接 可以…数据表
链接https://pan.baidu.com/s/1dPitBSxLznogqsbfwmih2Q 提取码b0rp --来自百度网盘超级会员V5的分享
sql的执行顺序 根据顺序 也就是说 select后面的字段别名 只能在order by中使用 mysql不支持sql92的外连接
mysql不支持满外连接 可以用union补上
去重关键字:DISTINCT 用在单列上是对一列数据去重 用在双列或以上 是对DISTINCT后面这一组数据去重 关于列参与运算问题,数字可以直接参与运算,无论是int或者varchar(只要是数字), 时间类型参与运算自己看情况,null指无法参与运算
可以使用IFNULL(column,0) 来转换 关于着重号 就是 还有特殊用用途,就是当字段是sql保留字或者特殊字的时候
比如下面有张表取名是order 这个和排序时候的order by里的order 属于特殊字
如果直接用 select * from order去查询就报错了 如果在表里有个order字段 需要用着重号 查询常数
查询时候可以加个表里没有的列进行查询 显示表结构
DESCRIBE employees
desc employees where过滤查询数据 Mysql语法不严谨 练习题:
查询员工12个月的工资总和,并起别名年薪 注意 如果要求取名 A B 中间有个空格的情况下 那么必须加单引号或者双引号或者着重号 查询employees表中对job_id去重 查询工资大于12000的员工姓名和工资 查询员工号为176的员工的姓名和部门号 显示表 departments的结构,并查询其中的全部数据 运算问题
Mysql中的 - * / div %取余(取模) mod
dual可以看作mysql中的伪表 即使100/2 得到结果是50.0000 只要是除法都会保留4位小数
注意:如果100/0 就是说100 div 0 或者100 mod 0 结果都是null 可以理解为0不能做除数 取余 % 或者 mod和取余(取模)一个意思 如果与字符串数字相加 如果与字符串不是数字相加 有null参与运算就是null 练习:查询员工id为偶数的员工信息 员工id%20 比较运算符
等于 安全等于 不等于或者! 小于 小于等于 大于 大于等于
比较结果为true 返回 1 比较结果为false 返回0 其他情况返回null 下面来理解 为什么查询时候要查询null的时候 需要用xxx is null 而不能用 xxxnull 关于安全等于
解释:安全等于()和等于()作用是相似的,唯一区别是除了功能外还可以用来对null进行判断
用比较 会出现1 0 null 三种情况 而用比较 会出现 1 或者 0 练习:查询employees表中 commission_pct为null的数据有哪些
那么可查为null 可以使用关键字 is null 也可以使用运算符 运算符中的一些关键字
is null 为空运算符 判断值,字符串或者表达式是否为空
is not null 不为空运算符 判断值,字符串或者表达式是否不为空
isnull 为空运算符 判断一个值,字符串或者表达式是否为空
--------------------------------------------------------------------------------------------------------------------
least 最小值运算符 在多个值中返回最小值
greatest 最大值运算符 在多个值中返回最大值
-----------------------------------------------------------------------------------------------------------------------
between xxx and xxx 两值之间的运算符 判断一个值是否在两个值之间
--------------------------------------------------------------------------------------------------------------------
in 属于运算符 判断一个值是否为列表中的任意一个值
not in 不属于运算符 判断一个值是否不是一个列表中的任意一直个
-------------------------------------------------------------------------------------------------------------------
like 模糊匹配运算符 判断一个值是否符合模糊匹配规则
-----------------------------------------------------------------------------------------------------------------------
regexp 正则表达式运算符 判断一个值是否符合正则表达式的规则
rlike 正则表达式运算符 判断一个值是否符合正则表达式的规则 关于
is null 为空运算符 判断值,字符串或者表达式是否为空
is not null 不为空运算符 判断值,字符串或者表达式是否不为空
isnull 为空运算符 判断一个值,字符串或者表达式是否为空
的演示 和 is not null相同的一种变态写法 关于
least 最小值运算符 在多个值中返回最小值
greatest 最大值运算符 在多个值中返回最大值
的演示 看看就好 无意义 关于
between xxx and xxx 两值之间的运算符 判断一个值是否在两个值之间 包含边界
演示
注意:使用between 条件1 and 条件2 要求条件1是下线 条件2是上线 反过来 查询工资不在6000到8000之间的呢 not between xxx and xxx 关于
in 属于运算符 判断一个值是否为列表中的任意一个值
not in 不属于运算符 判断一个值是否不是一个列表中的任意一直个
的演示
int(里面放着一个set) not int(里面放着一个set) 注意:为什么这样写是错误的 这是错误演示 not in 关于
like 模糊匹配运算符 判断一个值是否符合模糊匹配规则
的演示 练习:查询表中包含字符a且包含字符e的员工信息 模糊查询存在一些特殊情况 比如我需要查询第二个字符是_并且第三个字符是a的 用转义字符:\ 转义字符的特殊用法 ESCAPE的用法 关于
regexp 正则表达式运算符 判断一个值是否符合正则表达式的规则
rlike 正则表达式运算符 判断一个值是否符合正则表达式的规则
的演示
^ 开头 结尾 逻辑运算符:
逻辑运算符主要用来判断表达式的真假,在Mysql中,逻辑运算符的返回结果为 1(true) 0(false) 或者null
not 或 ! 逻辑非
and 或 逻辑与
or 或 || 逻辑或
xor 逻辑异或
and的优先级高于or
关于XOR 就是满足一个条件但是不满足另外的条件 SELECT * FROM your_table WHERE condition1 XOR condition2 XOR condition3;
就是满足其中一个条件 但是不能同事满足其他条件 比较运算符和逻辑运算符练习
查询工资不在5000到12000的员工的姓名和工资 查询在20或50号部门工作的员工姓名和部门号 查询公司中没有管理者的员工姓名及job_id 查询公司中有奖金的员工姓名,工资和奖金级别 查询员工姓名的第三个字母是a的员工姓名 查询姓名中有字母a和k的员工姓名 查询员工表中 first_name以 e 结尾的员工信息 查询员工表中部门编号在80到100之间的姓名,工种 查询员工表中manager_id是 100101110的员工姓名,工资,管理者id 第5章 排序与分页 asc 升序 默认
desc 降序
没有使用排序 例如
select * from employees 排序规则是数据库表数据 实际添加的先后顺序 使用别名进行排序 select查询语句的执行顺序 为什么只有order by中才可以使用别名 原因 select 选择要显示的列 在order by执行之前
# 注意 根据sql查询的顺序 列的别名只能在order by中使用 where中使用会报错 Limit 分页 显示第二页面20条数据
这里有个公式
pageNo:表示页数
pageSize:表示显示条数
limit (pageNo-1)*pageSize,pageSize 那么显示第二页20条数据就是
limit (2-1)*20,20 注意MYSQL不支持这样写 实际项目中 计算好 limit 0,20 可以简写成 limit 20
where ..... order by.... limit ... 练习:员工表一共107条数据 但是我只想显示第 3233条数据
limit 参数1,参数2 参数1 意思跳过前面多少条数据 参数2 显示后面多少条数据
那么 limit 31,2 跳过前面31条数据 显示两条 那么不就是 32 和 33条数据么 LIMIT在Mysql8z之后新特性
LIMIT ....OFFSET..... 其实就是原先的参数换个位置 LIMIT 放在查询语句最后 练习:查询员工表中工资最高的员工信息 注意:
不同数据库分页不同 LIMIT可以在Mysql,PGSQL,MARIADB,SQLite等数据库中使用,表示分页
不能使用在SQLServer DB2 Oracle中 Oracle中实现分页的一种方式: 通过rownum SELECT * FROM ( SELECT my_table.*, ROWNUM AS row_num FROM my_table WHERE ROWNUM page * size ) WHERE row_num ((page-1) * size); 排序与分页练习 查询员工的姓名和部门号和年薪,按照年薪降序,如果年薪相同按姓名升序显示 当然 asc可以不写 不然引号可以 查询工资不在8000到17000的员工的姓名和工资,按工资降序,显示第21到40位置的数据 查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序 第六章:关联表查询 比如查询员工 Abel在哪个城市工作 如果这样查 数据库连接要3次 那么关联表查询目的就是一次查出来 演示笛卡尔积 多表联查:需要有连接条件 这里是sql92的写法
多表联查前提条件是这些一起查询的表之间是有关系的(1对1,1对多) 注意 当两张表中有重名字段时候 前面需要加表名 可以给别起别名 练习:查询员工的编号,姓名,部门名字,所在城市 多表联查分类
1.关于等值连接和非等值连接(针对连接条件来讲)
2.自连接和非自连接
3.内连接和外连接 1.关于等值连接和非等值连接(针对连接条件来讲)
查询每个员工的薪资等级 2.自连接和非自连接
练习:查询员工id,员工姓名,和上级领导id和上级领导的姓名 3.内连接和外连接 sql92与sql99语法如何实现内连接与外连接
内连接:上面的关联表查询都是内连接
外连接 SQL99语法 left join和left out join 一个意思
左外连接 107条数据 右外连接 right join .... on 满外连接 意思满足左边的表也满足右表 Mysql不支持 Oracle支持 SQL99中 7种JOIN的实现 在Mysql中实现
通过UNION关键字合并
要求:两个表对应的列数和数据类型必须相同,并且互相对应 UNION和UNION ALL区别
UNION会去重
UNION ALL 不会去重 那么在Mysql中想实现满外连接
用左外连接加右外连接 通过 UNION就可以实现 Mysql中要实现满外连接 UNION和UNION ALL的使用
因为UNION ALL不需要去重 相对效率高 说错了 右外连接 有些部门里没有员工 其实条件本身为null用a.department_id或者b.department_id都一样 SQL99语法新特性
自然连接 NATURAL JOIN 和 USING连接
NATURAL JOIN用来表示自然连接.可以把自然连接理解为SQL92中的等值连接.它会对两张表中所有相同的字段,然后进行等值连接
也就是说只要字段名相同 默认他们为连接条件
注意:NATURAL JOIN 自然连接 好比INNER JOIN USING连接 指定连接条件的字段 拓张:使用join...on还可以这么使用 多表联查练习:
查询所有员工的姓名,部门号和部门名称 查询90号部门员工的job_id和90号部门的location_id 查询所有有奖金的员工的last_name,job_id,department_id,department_name where a.commission_pct is not null 注意这里要用left join 原因:所有员工 查询city在Toronto工作的员工的last_name,job_id,department_id,department_name 查询员工所在部门名称,部门地址,姓名,工作,工资其中员工所在部门名称为Executive 查询指定员工姓名,员工号,以及他的管理者的姓名和员工号,结果类似于下面的格式
employess EMP# manager Mgr#
kochhar 101 King 100 查询哪些部门没有员工 NOT EXISTS 查询哪个城市没有部门 查询部门名为Sales或者IT的员工信息 第七章:函数的分类
1.单行函数(内置函数) 一行数据出来一个结果
2.多行函数(聚合函数)(内置函数) 多行数据出来一个结果
3.自定义函数 单行函数:大致分类
数值类型函数
字符串类型函数
日期时间类型函数
流程控制函数
加解密信息函数 链接https://pan.baidu.com/s/1-dPWDIXX02XTLeyhb1ZZuQ 提取码z2jg --来自百度网盘超级会员V5的分享