您的位置:首页 > 数据库 > MySQL

表的查询(一)

2016-07-18 15:45 429 查看
在mysql里面,我个人表查询是一个非常 “大头”的操作。

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值
2.高级数据过滤

[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 select