1.SQL语句中使用 * 的缺点有
- a) 查询出了不必要的列
- b) 效率上不如直接指定列名
2.mysql中or和and的区别:
- 写法无差异,他们最大的差异只有两点: 一个是 and 一个是 or;
- 本身的含义,and(并且)、or(或者)
- and 要满足所有条件,两者必须同时成功才可以显示对应条件下的数据,否则没有。
- or 则是只要满足一条即可。
- 简明的说:and必须满足所有条件;or满足一个条件即可
3.字段长度
# 查询员工表所有名字长度为4 的员工的员工编号,姓名
# length() 获取指定字段值的长度
select empno,ename from emp where length(ENAME)=4;
4.表连接(Inner JOIN,Left Join,Right Join)
# 内连接(inner join):又称等值连接,只返回两个表中联结字段相等的行
# 范围:交集(A∩B)
# 说明: 组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分 select * from a_table a inner join b_table b on a.id = b.id
# 左连接(left join):全称是左外连接(left outer join),是外连接中的一种。返回包括左表中的所有记录和右表中联结字段相等的记录
# 说明:左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
select * from a_table a left join b_table b on a.a_id = b.b_id;
# 右连接(right join):全称是右外连接(right outer join),是外连接中的一种。返回包括右表中的所有记录和左表中联结字段相等的记录
# 说明:与左(外)连接相反。右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。
select * from a_table a right outer join b_table b on a.a_id = b.b_id;
5.GROUP BY和ORDER BY的区别
- ORDER BYQ 和GROUP BY是两个用于对查询结果进行排序和分组的关键字。它们在功能上有一些相似之处,但使用方式和结果是不同的。
- order by(排序查询),asc升序,desc降序(默认升序,可缺省)
//查询所有信息按id升序排序
select * from 表名 order by id
//先按id升序排序,后按年龄降序排序
select * from 表名 order by id,age desc
- having只能用于group by子句,作用于组内,having条件子句可以直接跟函数表达式,使用group by子句的查询语句需要使用聚合函数
- 如果在 SELECT 子句中选择了非聚合列(如 dept.deptno),那么必须在 GROUP BY 子句中对其进行分组。否则,查询将出错
//按照学号分组,查询每个学号的总成绩
select 学号,SUM(成绩) from 选课表 group by 学号
//查询平均成绩大于001课程平均成绩的学号,并按平均成绩降序排序
select 学号,AVG(成绩) from 选课表 group by 学号 having AVG(成绩)>(select AVG(成绩) from 选课表 where 课程号="001") order by AVG(成绩) desc
6.日期/时间函数
- now():返回当前的日期时间。
- curdate():返回当前的日期。
- curtime():返回当前的时间。
- year():提取年份。
- month():提取月份。
- day():提取天(号/日)。
- hour():提取小时。
- minute():提取分钟。
- second():提取秒。
- dayname():返回传入日期对应的星期数。
- monthname():返回传入日期对应的字符串形式的月份。
7.统计函数Count()
- count() 是一个聚合函数,返回指定匹配条件的行数。开发中常用来统计表中数据,全部数据,不为null数据,或者去重数据。
- count(1):统计所有的记录(包括null)。
- count(*):统计所有的记录(包括null)。
- count(字段):统计该"字段"不为null的记录。
- count(distinct 字段):统计该"字段"去重且不为null的记录。
- 根据不同情况会有不同区别,MySQL 会对count()做优化。
- (1)如果表中只有一列,则count( )效率最优。
- (2)如果表有多列,且存在主键,count (主键列名)效率最优,其次是:count (1) >count( *)。
- (3)如果表有多列,且不存在主键,则count(1 )效率优于count( *)
- 阿里开发手册规范相关规定:
- 1.【强制】不要使用 count(列名)或 count(常量)来替代 count(),count()是 SQL92 定义的标 准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关. 说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行.
- 2.【强制】count(distinct col) 计算该列除 NULL 之外的不重复行数,注意 count(distinct col1, col2) 如果其中一列全为 NULL,那么即使另一列有不同的值,也返回为 0.
- 实例:
select month(hiredate) 月份,count(*) 人数 FROM emp WHERE year(hiredate) = 1981 group by month(hiredate)
8.函数max()、min()、sum()、avg()
- MAX()返回指定列中的最大值。
- MIN()的功能正好与MAX()功能相反,它返回指定列的最小值。
- SUM()用来返回指定列值的和(总计)。
- AVG()通过对表中行数计数并计算特定列值之和,求得该列的平均值。
- AVG()可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。
9.LIMIT 语句
- LIMIT 语句是 MySQL 中常用的语句之一,它主要用于从关系型数据库中读取数据时,指定需要读取的行数。可以利用该语句实现分页功能,或者限制结果集返回的行数。
10.between语句
- BETWEEN 运算符用于 WHERE 表达式中,选取介于两个值之间的数据范围。BETWEEN 同 AND 一起搭配使用,语法如下:
WHERE column BETWEEN value1 AND value2
WHERE column NOT BETWEEN value1 AND value2 BETWEEN
- 数据比较BETWEEN 还具有数据比较功能语法如下:
expr BETWEEN min AND max
当 expr 表达式的值大于或等于 min 且小于或等于 max 时, BETWEEN 的返回值为 1 ,否则返回 0 。利用这个功能,可以判断一个表达式或值否则在某个区间。
文章评论