表的查询(一)
2016-07-18 15:45
429 查看
在mysql里面,我个人表查询是一个非常 “大头”的操作。
例如,检索表中所有的数据:
语法:SELECT * FROM 表名;
检索表中特定的某一列:
语法:SELECT 列名 FROM 表名;
检索多个列:
语法: SELECT 列名1,列名2,列名3… FROM 表名;
–《SQL必知必会》
1.按照某一列排序:
语法:SELECT * FROM 表名 ORDER BY 列名;
注意:这里我们排序依照的列不一定非要出现在查询结果中,也就是说,用非检索的列排序数据是完全合法的。
2.按照多个列排序:
语法:SELECT * FROM 表名 ORDER BY 列名1,列名2,列名3…;
这里按照多个列排序的意思是:当具有列名1相同的多个结果时,再将这些结果按照列名2进行排序。
3.指定排序方向:
数据排序不限于升序排序(从A到Z),也可以添加DESC 使用降序排序。
注意:DESC只对其前面的列起作用,如果多列排序,只有一个列名后面添加了DESC,那么只有这一列排序为降序排序。
例如:
上面首先按照价格的降序排序,对于价格相同的,再按照name进行默认的升序排序。对于价格不同的,不会考虑依照name排序的结果。
数据过滤依靠WHERE子句实现。
1.最简单的,例如我们查询分数为100的学生记录,将该学生的名字列出来。
这里我们使用的是“=”,当然还有很多其他的操作符号:
2.高级数据过滤
[b]AND操作符[/b]
AND操作符是给WHERE子句附加条件的,即检索出来的数据要满足AND前后的2个条件。
[b]OR操作符[/b]
检索出来的数据只要满足其中一个条件即可。
计算次序问题:AND操作符优先处理。
[b]IN操作符[/b]
IN操作符用来指定条件范围:
例如有表:
查询:
[b]NOT操作符[/b]
NOT操作符的作用有且只有一个功能,那就是否定它之后所跟的任何条件。
依然是查询上表,如下:
%:代表任何字符出现任何次数。
如下:
_:匹配多个字符。
如下:
REGEXP:使用扩展正则表达式模式匹配。
如下,检索以M开头的记录:
不是以M开头的记录:
这里NOT位置不固定,2个位置都可以。
计算字段:
1.基础的数据检索语句
数据检索的基础语句是SELECT 语句。例如,检索表中所有的数据:
语法:SELECT * FROM 表名;
检索表中特定的某一列:
语法:SELECT 列名 FROM 表名;
检索多个列:
语法: SELECT 列名1,列名2,列名3… FROM 表名;
2.对检索出的数据进行排序
关系型数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义–《SQL必知必会》
1.按照某一列排序:
语法:SELECT * FROM 表名 ORDER BY 列名;
注意:这里我们排序依照的列不一定非要出现在查询结果中,也就是说,用非检索的列排序数据是完全合法的。
2.按照多个列排序:
语法:SELECT * FROM 表名 ORDER BY 列名1,列名2,列名3…;
这里按照多个列排序的意思是:当具有列名1相同的多个结果时,再将这些结果按照列名2进行排序。
3.指定排序方向:
数据排序不限于升序排序(从A到Z),也可以添加DESC 使用降序排序。
注意:DESC只对其前面的列起作用,如果多列排序,只有一个列名后面添加了DESC,那么只有这一列排序为降序排序。
例如:
SELECT id,price,name FROM products ORDER BY price DESC,name;
上面首先按照价格的降序排序,对于价格相同的,再按照name进行默认的升序排序。对于价格不同的,不会考虑依照name排序的结果。
3.数据过滤
上面我们是对表的某一列或者几列进行全部的查询,也就是我们查询结果是表中该列的全部记录。但是有时我们并不想将所有的都查出来,我们只想看到一些符合条件的结果。数据过滤依靠WHERE子句实现。
1.最简单的,例如我们查询分数为100的学生记录,将该学生的名字列出来。
mysql> SELECT name FROM students WHERE score = 100; +----------+ | name | +----------+ | xiaoming | +----------+ 1 row in set (0.00 sec)
这里我们使用的是“=”,当然还有很多其他的操作符号:
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的2个值之间 |
IS NULL | 为NULL值 |
… | … |
[b]AND操作符[/b]
AND操作符是给WHERE子句附加条件的,即检索出来的数据要满足AND前后的2个条件。
[b]OR操作符[/b]
检索出来的数据只要满足其中一个条件即可。
计算次序问题:AND操作符优先处理。
[b]IN操作符[/b]
IN操作符用来指定条件范围:
例如有表:
mysql> select * from students; +----------+-----+-------+ | name | sex | score | +----------+-----+-------+ | xiaoming | m | 100 | | a | m | 20 | | b | m | 50 | | b | m | 80 | +----------+-----+-------+ 4 rows in set (0.00 sec)
查询:
mysql> select score from students where score IN (50,42,100); +-------+ | score | +-------+ | 100 | | 50 | +-------+ 2 rows in set (0.03 sec)
[b]NOT操作符[/b]
NOT操作符的作用有且只有一个功能,那就是否定它之后所跟的任何条件。
依然是查询上表,如下:
mysql> select score from students where NOT score IN (20,50,41); +-------+ | score | +-------+ | 100 | | 80 | +-------+ 2 rows in set (0.00 sec)
4.通配符过滤
1.LIKE:指示DBMS,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。%:代表任何字符出现任何次数。
如下:
mysql> select * from students; +-------------+-----+-------+ | name | sex | score | +-------------+-----+-------+ | xiaoming | m | 100 | | a | m | 20 | | b | m | 50 | | b | m | 80 | | fishab | m | 20 | | fishcd | m | 20 | | Michle | m | 20 | | MichleJason | m | 20 | +-------------+-----+-------+ 8 rows in set (0.00 sec) mysql> select * from students where name LIKE 'fish%'; +--------+-----+-------+ | name | sex | score | +--------+-----+-------+ | fishab | m | 20 | | fishcd | m | 20 | +--------+-----+-------+
_:匹配多个字符。
如下:
mysql> select * from students where name LIKE 'fisha_'; +--------+-----+-------+ | name | sex | score | +--------+-----+-------+ | fishab | m | 20 | +--------+-----+-------+ 1 row in set (0.00 sec)
REGEXP:使用扩展正则表达式模式匹配。
如下,检索以M开头的记录:
mysql> select * from students where name REGEXP '^M'; +-------------+-----+-------+ | name | sex | score | +-------------+-----+-------+ | Michle | m | 20 | | MichleJason | m | 20 | +-------------+-----+-------+ 2 rows in set (0.00 sec)
不是以M开头的记录:
mysql> select * from students where name NOT REGEXP '^M'; +----------+-----+-------+ | name | sex | score | +----------+-----+-------+ | xiaoming | m | 100 | | a | m | 20 | | b | m | 50 | | b | m | 80 | | fishab | m | 20 | | fishcd | m | 20 | +----------+-----+-------+ 6 rows in set (0.00 sec) mysql> select * from students where not name REGEXP '^M'; +----------+-----+-------+ | name | sex | score | +----------+-----+-------+ | xiaoming | m | 100 | | a | m | 20 | | b | m | 50 | | b | m | 80 | | fishab | m | 20 | | fishcd | m | 20 | +----------+-----+-------+
这里NOT位置不固定,2个位置都可以。
5.字段拼接和计算
如下:mysql> SELECT CONCAT(name,'===',score) AS result from students; +------------------+ | result | +------------------+ | xiaoming===100 | | a===20 | | b===50 | | b===80 | | fishab===20 | | fishcd===20 | | Michle===20 | | MichleJason===20 | +------------------+ 8 rows in set (0.05 sec)
计算字段:
mysql> SELECT CONCAT(name,'===',score*10) AS result from students; +-------------------+ | result | +-------------------+ | xiaoming===1000 | | a===200 | | b===500 | | b===800 | | fishab===200 | | fishcd===200 | | Michle===200 | | MichleJason===200 | +-------------------+ 8 rows in set (0.03 sec)
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- Android之获取手机上的图片和视频缩略图thumbnails
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- 数据库链接字符串查询网站
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法