SQL查询语句
查询数据
数据库中最常用的操作。通过对数据库的查询,用户可以从数据库中获取需要的数据
基本查询语句
select 属性列表 from 表名
[where 条件表达式]
[group by 字段名]([having 条件表达式])
[order by 属性名 [asc|desc]]
表单查询
- 使用*查询所有字段,*可以表示所有字段,不能改变字段的排列顺序;
- 查看数据库中表结构:
desc(describe);
- 查询指定字段:
select 字段名1,字段名2 from 表名;
- 去除重复数值:
select distinct 字段名 from 表名;
where子句---查询指定记录
- 常用查询条件:
- 比较、指定范围(between and---闭区间)、指定集合(in)、匹配字符(like---字符串)、多个查询条件(and,or)
- like匹配查询:通配符'%'、'_',前者匹配多个字符,后者匹配单个字符
- and多条件查询,等同于&&,or多条件查询,等同于||,and比or要先运算
- limit子句:限制查询结果的数量---不指定初始位置,从第一条记录开始显示
- limit 记录数(limit n,m---n:开始位置 m:要检索的行数)
- 注意:行0,检索出来的第一行为行0,而不是行1,limit 1,1检索出的是第二行
- 对查询结果排序:order by 属性名 [ASC升序(默认)|DESC降序]
- 考虑和limit组合使用,找出一个列中的最高或最低的值
- select 字段名 from 表名 order by 字段名 DESC|ASC limit 1;
- 分组查询:group by 属性名 [having 条件表达式]
- 将查询结果按某个字段或多个字段进行分组。字段中值相等的为一组。
- having对分组后的结果按条件筛选,只能在group by子句后使用
集合函数
- count()、sum()、avg()、max()和min();
group by关键字通常需要与集合函数一起使用
正则表达式查询
用某种模式去匹配一类字符串的方式,比通配符的查询能力更强大、更灵活。应用于复杂查询
- 使用regexp匹配查询正则表达式
属性名(需要查询的字段的名称) regexp '匹配方式'(以哪种方式进行匹配查询)
- '^':查询以特定字符或者字符串开头的记录
2. '$':查询以特定字符或者字符串结尾的记录
3. '.':匹配字符串中的任意一个字符
'.'和'_'的区别:.只能用于regexp关键字匹配;_不能用于regexp关键字匹配
4. '[]':字符集合。匹配所包含的任意一个字符;可以指定集合的区间:[a-z],[1-9]
5. '[^字符集合]':匹配指定字符以外的字符
匹配指定字符串:如果指定多个字符串时,需要用符号"|"隔开。匹配字符串中任意一个即可。
6. '*'和'+':匹配多个字符---匹配多个该符号之前的字符
"+":至少表示一个字符 "*":可以表示0个字符
7. '{m}'或者'{m,n}'来指定字符串连续出现的次数
m是一个非负整数,匹配确定的m次
m和n均为非负整数,其中m<=n
运算符
算数运算符
- 加减乘除求余
除法:/或DIV
取余:%或MOD
比较运算符
- 数值比较和字符串匹配
IS NULL为空、REGEXP正则表达式匹配、IN集合、BETWEEN两值之间
逻辑运算符
- 结果返回真值(1或true)和假值(0或false)
XOR-逻辑异或、OR或||-逻辑或、AND或&&-逻辑与、NOT或!-逻辑非
运算符优先级
注释符
- #...:单行注释,语法"#注释内容"(-- +)
- "-- " :(注意:"--"后面有一个空格)单行注释,语法"-- 注释内容"
- /.../:多行注释,语法"/注释内容/"
查询函数
- 联合查询UNION:用于合并具有相同字段结构的两个表的内容,主要用在一个结果中集中显示不同表的内容
并操作union、交操作intersect、差操作except
默认不返回重复记录、查询的表的字段必须一样、查询的数据类型必须能兼容
查询结果只是增加了行数而列数不变
- order by用于判断字段数量,联合查询union判断字段数量
- 系统用户名:
select system_user()
- 当前日期:
current_date()
- 连接数据库用户名:
session_user()
- 数据库名:
database()或schema()
- 数据库版本:
version()
- 数据库读取路径:
@@basedir
- mysql安装路径:
@@char
- 查看当前系统版本:
@@version_compile_os
- 当前机器的机器名:
@@hostname
截取函数
- 从左边返回字符数:
left(str,length)
- 从右边返回字符数:
right(str,length)
- 指定str起始位置pos,截取长度length:
Substr(str,pos,length)---substring
- 指定str,起始位置pos(默认为1),length可选,如果省略,则返回剩余文本:
mid(str,pos,length)
字符串连接函数
- 没有分隔符地连接字符串:
concat(str1,str2,...)
- 含有分隔符地连接字符串:
concat_ws(separator,str1,str2,...)
- 连接一个组的所有字符串:
group_concat(str1,str2,...)
字符串检索函数
- 返回str在str1中第一次出现的位置:
locate(‘str’,’str1’)
- 返回str中出现str1字符串的位置:
instr(‘str’,’str1’)
进制转换
- 八进制:
oct()
- 十六进制:
hex()
时间函数
sleep(N):让此语句运行N秒
编码值转换
- 返回字符串str最左面的字符的ASCII代码值,如果是空字符串,则返回0:
Ascii(str)
拓展作业一:
- 字符串截取函数:
1. Substring_index(str,dim,count)
从指定字符位置开始截取指定长度字符串
select substring_index('www.baidu.com.123', '.', 2);
输出:www.baidu
(从首位开始截取至第2个.点号前一位的字符串)
select substring_index('www.baidu.com.123', '.', -2);
输出:com.123
(从末尾开始第2个.点号开始截取到最后的字符串)
(若找不到任何标识,返回整个字符串)
- 系统函数:
- 数学函数:
1. ABS(x):返回绝对值
2. PI(x):返回圆周率,默认显示6位小数
3. CEIL(x):返回不小于x的最小整数;FLOOR(x):返回不大于x的最大整数;
4. POW(x,y)和POWER(x,y):返回x的y次乘方的值
5. EXP(x):返回e的x乘方后的值
6. LOG(x):返回x的自然对数,x相对于基数e的对数
7. COS(x),SIN(x),TAN(x)
- 字符串函数:
1. CHAR_LENGTH(str)
计算字符串字符个数
2. SPACE(n)
返回一个由n个空格组成的字符串
3. REPLACE(s,s1,s2)
返回一个字符串,用字符串s2替代字符串s中的所有的字符串s1
4. REVERSE(s)
将字符串s反转
5. REPEAT(s,n)
返回一个由重复字符串s组成的字符串,字符串s的数目等于n
拓展作业二:
1. 截取字符串中的部分字符
在acceses数据库中,使用mid()
在DB2和ORACLE数据库中使用函数substr()
在mysql和sql server数据库中使用函数substring()
- 日期形式转换
在access和oracle数据库中使用的是复合函数
在DB2数据库中使用的是cast()
在mysql和sql server数据库中使用函数convert()
- 获取当前日期
在access数据库中使用的是函数是now()
在DB2数据库中使用函数current_date()
在oracle数据库中使用函数sysdate()
在sql server数据库中使用函数 getdate()