这是从0开始学SQL的第二课:单表查询。单表查询是指只从一张表中查找数据,不需要关联多张表的查询。
SQL查询的基本结构由三个子句构成:select、from和where。
查询模版如下:
select 字段1,字段2,字段3 from 表名 where 条件
1、select命令后面跟着要查询的字段名,如果想查询表的所有字段名,可以用*表示。需要注意的是select 如果有多个字段,字段之间需要用英文逗号分隔。
2、from 命令跟着的是表名
3、where 后面跟着的是查询条件,查询条件可以很简单,也可以嵌套。后面系列文章会讲解。
举个例子来看下查询语句该怎么写。假如有这样一张学生信息的表:t_user
id | name | sex | age | major | tuition |
---|---|---|---|---|---|
1 | 张三 | 男 | 18 | 会计 | 5000 |
2 | 李四 | 男 | 19 | 软件工程 | 8000 |
3 | 陈红 | 女 | 17 | 软件工程 | 8000 |
1、找出所有学生的姓名。学生的姓名字段是name,因此我们应该把name字段放在select 中,表名是t_user,语句:
select name from t_user
查询结果:
name |
---|
张三 |
李四 |
陈红 |
2、找出性别是女性的所有学生信息。所有学生信息需要展示所有的字段,可以使用*号代替,查询条件是性别女,语句:
select * from t_user where sex='女'
查询结果:
id | name | sex | age | major | tuition |
---|---|---|---|---|---|
3 | 陈红 | 女 | 17 | 软件工程 | 8000 |
3、找出所有的专业名。因为一个专业有多名学生,所以查询出的专业名称不止一个。为了去除重复,我们可以在select后面加上关键词 distinct。这样就可以去除重复的记录了。
语句:
select distinct major from t_user
查询结果:
major |
---|
会计 |
软件工程 |
4、select 子句还可以带有+、-、*、/ 运算符的算术表达式。运算对象可以是常数或字段名。比如找出学费增长1.1倍后的学费结果。语句:
select name,tuition*1.1 from t_user
5、where 子句允许使用逻辑连词and 、or、not。比如找出专业是软件工程且性别是女性的学生信息。
语句:
select * from t_user where major='软件工程' and sex='女'
查询结果:
id | name | sex | age | major | tuition |
---|---|---|---|---|---|
3 | 陈红 | 女 | 17 | 软件工程 | 8000 |
6、where 子句还支持比较运算符 < 、>、<=、>=、=。比如找出年龄小于19岁的学生。
语句:
select * from t_user where age<19
查询结果:
id | name | sex | age | major | tuition |
---|---|---|---|---|---|
1 | 张三 | 男 | 18 | 会计 | 5000 |
3 | 陈红 | 女 | 17 | 软件工程 | 8000 |
7、更名运算。
select 的字段名可以更改,这样在查询结果中显示的就是更改后的属性名。
表名也可以更改,更改表名在多表查询时非常有用。
语法:
old-name as new-name。
比如:
select name as "姓名" from t_user。
查询结果:
姓名 |
---|
张三 |
李四 |
陈红 |
8、字符串运算。sql使用一对英文单引号或双引号来表示字符串。比如name="张三"。字符串是大小写敏感的,比如"Comp" 和 "comp"是不相等的。字符串还可以使用like关键字来模糊匹配。
语法:
name like '张%' 表示以张开头的姓名
name like '%张' 表示以张结尾的姓名
name like '%张%' 表示字符串中存在张字的姓名
9、排序。sql提供了order by 关键字来排序。order by 语句是默认使用升序。
语法:
select * from t_user order by age 表示按照年龄升序
select * from t_user order by age asc 表示按照年龄升序
select * from t_user order by age desc 表示按照年龄降序
select * from t_user order by age desc,name asc。表示按照年龄降序且按姓名升序。排到前面的字段,优先级越高。
END