### Select查询语句分类shell
- 简单查询语句
- 从一个表中查询数据
- 复杂查询语句
- 多表链接查询 (未来源于多个表的列横向叠加)
- 内链接
- 左链接
- 右链接
- 全链接
- 自链接
- 非等值链接
- 复合查询(将查询结果集上下叠加)
- Union
- Union All
- Intersect
- Minus
- 子查询
- 非关联子查询
- 关联子查询
- 多表链接查询 (未来源于多个表的列横向叠加)
查询语句语法结构
SELECT select_list #select_list 要显示的列,列之间用逗号隔开,列也称做投影 [ INTO new_table ] # 结果集导入新表 FROM [table_source] #表名 [ WHERE search_condition ] #表行过滤条件 [ GROUP BY group_by_expression ] #按照指定的列将表行分组 [ HAVING search_condition ] #对分组后的新行进行过滤 [ ORDER BY order_expression [ ASC | DESC ] ] #按照指定的1个或多个列进行排序,ASC增序,DESC降序
select中经常使用运算符
- 算数运算符:
- + 加法运算
- - 减法运算
- * 乘法运算
- /或DIV 除法运算
- % 或MOD 求余运算
- 逻辑运算符:
- and 并且
- or 或者
- xor 异或
- not或! 非
- 比较运算符:
- = 等于
- != 或<>不等于
- > 大于
- < 小于
- >= 大于等于
- <= 小于等于;
- <=> 严格比较两个NULL值是否相等,同为NULL时为真
- is null 为空值
- is not null 为非空值;
- in (值列表) 在值列表中
- not in (值列表)不在值列表中;
- between 低值 and 高值 (包含低值和高值)在低值和高值之间;
- not between 低值 and 高值 (包含低值和高值)不在低值和高值范围内;
- like ‘通配符’ 按照通配符进行匹配;
- % 匹配0个或任意多个字符
- _ 匹配任意1个字符
- 位运算符
- & 按位与
- | 按位或
- ^ 按位异或
- ! 取反
- << 左移
- >> 右移
- 赋值运算符
- := 用于select语句中的赋值,
- 运算符优先级
优先级 | 运算符 |
---|---|
1 | ! |
2 | ^ |
3 | *,/,DIV,%,MOD |
4 | -,+ |
5 | <<,>> |
6 | & |
7 | | |
8 | =,<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN |
9 | BETWEEN,CASE,WHEN,THEN,ELSE |
10 | NOT |
11 | &&,AND |
12 | ||,OR,XOR |
13 | := |
select where子句
- stu表数据以下
- 查询学生表中性别为'女',体重超过60公斤的学生的全部信息
- 查询学生表中1班或者2班中,身高超过190的学生
- 查询学生表中3班学生里面考分在400和520之间的女生
- 查询学生表中没有分配班级并且是女生的学生
- 在学生表体重低于40公斤且身高低于1.65米的学生,列出其姓名,身高,体重,总分以及总分占750分满分的百分比
- 在学生表中查找学生姓名,第二个字是‘侯’,或者 第一个字是‘张’且名字只有两个
函数
-
函数用来处理SQL语句中的数据,能够嵌入在SQL语句中使用,增长了SQL语句对数据的处理功能数据库
- 函数能够有0到多个参数,可是总会有一个返回值
- 函数能够用来计算、修改、格式化输出二维表中的各种数据
- 不一样数据库的函数的名称和用法略有不一样,但都会提供如:字符串处理、数值处理、日期处理、统计等分类的函数、方便用户处理各种数据
-
经常使用字符串函数express
-
char_length(str) 计算给定字符串长度函数
-
concat(str1,str2...) 字符串拼接编码
-
substr(str,pos,len) 字符串str从pos位置(1开始)开始截取len个字符spa
-
-
经常使用数值函数3d
-
round(num,n) 数值num对n+1位进行四舍五入运算,正数表示保留的小数位,负数表示对整数位进行四舍五入,0表示四舍五入取整code
-
-
经常使用日期函数blog
-
year(date) 对日期date取年份排序
-
month(date) 对日期date取月份
-
curdate() 获取当前日期
-
curtime() 获取当前时间
-
now() 获取当前时间
-
datediff(date1,date2) 返回date1与date2之间相隔的天数(date1-date2)
也能够这样写
或
-
-
经常使用条件判断函数
-
if(expr,v1,v2) 若是表达式expr成立返回v1,不成立返回v2
也能够进行嵌套
select sname,score,if(score>600,'优秀',if(score>500,'良好',if(score>400,'合格','不合格'))) from stu ; select sname,substr(sname,if(sname in('大乔','小乔'),2,1 ),if(substr(sname,1,2) in('诸葛','夏侯','太史'),2,1)) 姓氏 from stu; #substr(sname,if(sname in('大乔','小乔'),2,1 ),if(substr(sname,1,2) in('诸葛','夏侯','太史'),2,1)) 姓氏 表示使用姓氏做为别名代替原有的列名
-
-
CASE运算
-
能够添加多个条件判断,比单个if更加灵活
-
语法格式:case when expr1 then v1 [when expr2 v2 then] …… else vn end
select sname,score,(case when score>600 then '优秀' when score >500 then '良好' when score>400 then '合格' else '不合格' end)level from stu;
-
-
经常使用空值处理函数
-
当表中有空值时,任何运算与函数的返回结果均为null
-
ifnull(v1,v2) 若是v1为null则返回v2不然返回v1
显示出2班与未分班的学生
-
isnull(expr) 若expr为空返回1不然返回0
显示全部未分班的学生
-
-
经常使用聚合函数
-
max(col) 返回最大值,列的数据类型能够是数值、字符、日期型
-
min() 返回最小值,列的数据类型能够是数值、字符、日期型
-
sum() 列求和,列的数据类型不能是字符型
-
avg() 求平均值,列的数据类型不能是字符型
-
count() 统计,列中的若是有空值不会被统计计数
-
-
DISTINCT关键字
-
用于去除重复记录,须要放在第一个字段前
-
-
别名
-
为表或列设置代替的名称显示
-
列别名语法格式:select sname [as] 别名 from table;as可省略
-
表别名语法格式:select 表别名.字段名,表别名.字段名... from 代表 [as] 表别名;
-
-
order by排序
-
对查询结果集按照order by后面指定的1列或多列排序
- 分为升序和降序
- 升序 ASC,默承认以不写
- 降序 DESC
- 对于数值,升序是从小到大,降序是从大到小
- 对于日期和时间,升序是从远到近,降序是从近到远
- 对于英文字符,升序是从a到z,降序是从z到a
- 对于中文字符,升序按照字符集编码从小到大,降序按照字符集编码从大到小,若是选择gbk编码能够按照拼音来排序
- 对于排序列的名称,能够用如下方式
- 列名
- 列别名
- 列的序号
- 函数
- 表达式
- 分为升序和降序
-
按照学生成绩由高到低排序显示
-
按照学生年龄由老到幼排序
-
按照姓名首字母排序
注:convert(sname using gbk) 用于转换所使用的字符集
-
-
limit 区域显示
-
用于显示查询结果中的部份内容
-
LIMIT子句最后执行
-
语法格式:limit N,M 由第N条显示M条记录,N从0开始,省略N默认为0
-