二、数据库查询
1、数据的查询语句
- 查询产生一个虚拟表,看到的是表形式显示的结果
- 结果并不真正存储,每次执行查询只是从现有数据表中提取数据,并按照表的形式显示出来
1. from子句
语法: selcet * from 表名 where true;
1. * 代表查询所有列,可以指定列名查询指定列,多个列名之间逗号隔开
2. where true 可以省略不写
2. 使用别名
语法: selcet 列名 as 别名 from 表名;
3. where子句
当查询条件中和数字比较,可以使用单引号引起,也可以不用,当和字符及日期类型的数据比较,则必须用单引号引起
语法: selcet * from 表名 where 条件表达式;
4. 其它语句
- upper(char)/lower(char)用于将字符转换为大/小写形式
例子: selcet upper('hello world'); - 查询rose的信息(需要区分大小写)
例子: selcet * from 表名 where 列名=upper('rose'); - 查询“id”列,包含所有重复值:
例子: selcet id from 表名;
查询“id”列,去掉重复值:
例子: selcet distinct id from 表名; - 字符串的拼接
例子: selcet concat('hello','world'); - length(字符串长度)
例子: select length('love');
2. 运算符
1. 算术运算符
- +: 加;操作数之和。 例子: a+b
- -: 减;操作数之差。 例子: a-b
- -: 一元减号,操作数取负 例子: -b
- *:乘,操作数之积 例子: a*b
- /:除,操作数之商 例子: a/b
- %:模,操作数除后的余数 例子: a%b
2. 比较运算符
对表达式的左边和右边进行比较,一个比较运算符的结果总是1(真),0(假),或是为NULL(不能确定)
比较运算符可以用于比较数字和字符串。数字作为浮点值比较,而字符串以不区分大小写的方式进行比较(除非使用特殊的BINARY二进制关键字)
1. =
2. != 或 <>
3. <
4. <=
5. >
6. >=
7. in: 多个之中一个,例: a in(b1,b2,b3,……)
8. between: 两个个之中一个,例: a between b and c
9. like: 匹配,例: a like b
10. not like
11. regexp: a regexp b
12. not regexp
13. <=>: 相同为真(允许为null)
14. is null: a is null
15. is not null
16. >(或者>=)any: 大于(或者大于等于)最小
17. <(或者<=)any: 小于(或者小于等于)最大
18. >(或者>=)all: 大于(或者大于等于)最大
19. <(或者<=)all: 小于(或者小于等于)最小
3. 通配符
如果想执行通配符数据搜索,应该使用like运算符。 1. % :百分号,任意长度(可为0)的字符串
2. _ :下划线,任意单个字符
3.DML(数据操作语言)
- 插入语句
语法: insert into 表名(列名1,列名2,……) values(值1,值2,……);- 如果表名后面没写字段名,则默认是向所有的字段添加值
- 字符串值应该用单引号或双引号括起来
- 插入多行:insert into 表名(列名) values(值1),(值2),……;
- 更新语句
语法: update 表名 set 列名=更新值 where 条件表达式- where 子句是判断语句,用来设定条件,限制只更新匹配的行,如果不带where子句,则更新所有行数据。
- 删除语句
语法: delete from 表名 where 条件表达式- 此语句删除表中的行,如果不带where子句,则删除整个表中的记录,但是表不被删除
4. 子查询
在select查询中,在where查询条件中的限制条件不是一个确定的值,而是来自于另外一个查询的结果。为了给查询提供数据而首先执行的查询语句叫做子查询。 嵌入在其它SQL语句中的select语句,大部分时候出现在where子句中。
子查询嵌入的语句称作主查询或父查询
主查询可以是SELECT语句,也可以是其它类型的语句比如DML或DDL语句。
根据返回结果的不同,子查询可分为单行子查询、多行子查询及多列子查询。
1. exists关键字
- exists后边的子查询至少返回一行数据,则整个条件返回TRUE。如果子查询没有结果,则返回FALSE。
2.内视图(匿名视图)
- 在查询语句中,from子句用来指定要查询的表。如果要在一个子查询的结果中继续查询,则子查询出现在from子句中,这个子查询也称作行内视图或者匿名视图。这时,把子查询当作视图对待,但视图没有名字,只能在当前的SQL语句中有效。
5. 排序
1. 单列排序
语法: select 列名 from 表名 where 条件表达式 order by 排序方式
1. order by 必须出现在select中的最后一个子句
2. 排序时默认按升序排列,即由小及大, asc用来指定升序排序
3. desc用来指定降序排序
4. null值视作最小,则升序排列时,排在最前,降序排列时,排在最后
2. 多列排序
当以多列作为排序标准时,首先按照第一列进行排序,如果第一列数据相同,再以第二列排序,以此类推。多列排序时,不管正序还是倒序,每个列需要单独设置排序方式。
语法: select 列1,列2 from 表名 where 条件表达式 order by 列1 排序方式, 列2 排序方式;