MySQL学习笔记(二):查找记录方法-SELECT(详细)
来源:互联网 发布:手机优化工具 编辑:程序博客网 时间:2024/06/15 05:04
SELECT使用方法
查找记录
SELECT select_expr[,select_expr...]
[FROM tb_references
[WHERE where_condition]
[GROUP BY {col_name|position} [ASC|DESC],...]
[HAVING where_condition]
[ORDER BY {col_name | expr | position} [ASC|DESC],...]
[LIMIT {[offset,] row_count|row_count OFFSET offset}]
]
关于其中的一些名词解释
select_expr
- 查询表达式
- 每一个表达式表示所需要查找的一列,至少有一个
- 多个列之间以英文逗号分隔
- 星号(
*
)表示多有列。(tb_name.*
可以表示命名表的所有列) - 查询表达式可以使用
[AS] alias_name
为其赋予别名 - 别名可用于
GROUP BY
,ORDER BY
或HAVING
子句
WHERE
- 条件表达式
- 对记录进行过滤,如果没有指定
WHERE
子句,则显示所有记录 - 在
WHERE
表达式中,可以使用MySQL
支持的函数或运算符。
GROUP BY
- 查询结果分组
HAVING
- 分组条件
ORDER BY
- 对查询结果进行排序
LIMIT
- 限制查询结果返回的数量
SELECT
方法示例
使用示例数据表
在下面的方法演示中都以这张数据表作演示
mysql> SELECT * FROM users2;+----+----------+----------------------------------+-----+------+| id | username | userpassword | age | sex |+----+----------+----------------------------------+-----+------+| 1 | AAA | IAMPASSWORD | 25 | 1 || 3 | BBB | IAMPASSWORD | 45 | 1 || 4 | CCC | *asfjdhia | 26 | 1 || 6 | DDD | *dsfjksp;flke | 32 | 1 || 8 | FFF | bc9c74cd849e1f1b99b16b0d92292bf6 | 50 | 0 || 9 | GGG | ahnkhFKAJ | 15 | NULL || 10 | WOO | **qwdfhjoQ | 25 | NULL |+----+----------+----------------------------------+-----+------+7 rows in set (0.01 sec)
查询指定列的数据
例如查询id
字段、username
字段的内容
SELECT select_expr[,select_expr...]
mysql> SELECT id,username FROM users2;+----+----------+| id | username |+----+----------+| 1 | AAA || 3 | BBB || 4 | CCC || 6 | DDD || 8 | FFF || 9 | GGG || 10 | WOO |+----+----------+7 rows in set (0.00 sec)mysql> SELECT username,id FROM users;Empty set (0.01 sec)mysql> SELECT username,id FROM users2;+----------+----+| username | id |+----------+----+| AAA | 1 || BBB | 3 || CCC | 4 || DDD | 6 || FFF | 8 || GGG | 9 || WOO | 10 |+----------+----+7 rows in set (0.00 sec)
可以发现两者表的顺序适合查询语句中的select_expr
顺序是一致的。
查询指定列的数据,并作为别名出结果
SELECT select_expr [AS] alias_name
将查询的id
字段以uid
,username
字段以uname
列出结果
mysql> SELECT id AS uid, username AS uname FROM users2;+-----+-------+| uid | uname |+-----+-------+| 1 | AAA || 3 | BBB || 4 | CCC || 6 | DDD || 8 | FFF || 9 | GGG || 10 | WOO |+-----+-------+7 rows in set (0.00 sec)
在表达式中[AS]
是允许不键入的,但是在实际操作中建议的还是都给写上,以免发生误解。例如以下操作:
它的意义为查询users2
表中的id字段的值,并取别名为username
展示出来。而不是查询users2
表中id
、username
字段的值。
mysql> SELECT id username FROM users2;+----------+| username |+----------+| 1 || 3 || 4 || 6 || 8 || 9 || 10 |+----------+7 rows in set (0.01 sec)
将查询结果分类分组
SELECT select_expr[,select_expr...] [GROUP BY {col_name|position} [ASC|DESC],...]
将查询结果以性别sex
进行分类,在表达式中ASC
表示以正序进行查找,DESC
表示以倒序进行查找。
mysql> SELECT * FROM users2 GROUP BY sex;+----+----------+----------------------------------+-----+------+| id | username | userpassword | age | sex |+----+----------+----------------------------------+-----+------+| 9 | GGG | ahnkhFKAJ | 15 | NULL || 8 | FFF | bc9c74cd849e1f1b99b16b0d92292bf6 | 50 | 0 || 1 | AAA | IAMPASSWORD | 25 | 1 |+----+----------+----------------------------------+-----+------+3 rows in set (0.01 sec)
另外设定分组条件
[HAVING where_condition]
可以配合着上一条查询分组操作使用。
例如查询性别sex
字段并以sex
字段分组中的年龄age>20
的数据操作。
mysql> SELECT sex FROM users2 GROUP BY sex HAVING age > 20;ERROR 1054 (42S22): Unknown column 'age' in 'having clause'
如果按照上面的查询语句会发现出错,出错的原因是以为查询的字段中没有包含age
字段,所以此时用age>20
来作为条件会出现错误。
所以需要将条件语句中用到的字段加入查询字段中,如下操作语句:
mysql> SELECT sex,age FROM users2 GROUP BY sex HAVING age > 20;+------+-----+| sex | age |+------+-----+| 0 | 50 || 1 | 25 |+------+-----+2 rows in set (0.01 sec)mysql> SELECT * FROM users2 GROUP BY sex HAVING age > 20;+----+----------+----------------------------------+-----+------+| id | username | userpassword | age | sex |+----+----------+----------------------------------+-----+------+| 8 | FFF | bc9c74cd849e1f1b99b16b0d92292bf6 | 50 | 0 || 1 | AAA | IAMPASSWORD | 25 | 1 |+----+----------+----------------------------------+-----+------+2 rows in set (0.00 sec)
使用LIMIT限制查询
[LIMIT {offset,} row_count | row_count OFFSET offset}]
例如查询users2
表中的头两行数据:
mysql> SELECT * FROM users2 LIMIT 2 -> ;+----+----------+--------------+-----+------+| id | username | userpassword | age | sex |+----+----------+--------------+-----+------+| 1 | AAA | IAMPASSWORD | 25 | 1 || 3 | BBB | IAMPASSWORD | 45 | 1 |+----+----------+--------------+-----+------+2 rows in set (0.00 sec)
查询第4
行开始的2
行数据,需要注意的是LIMIT
中是以0
开始计算的,所以查询第4
行时应该加入LIMIT
的条件时应该是3=(4-1)
。
mysql> SELECT * FROM users2 LIMIT 3,2;+----+----------+----------------------------------+-----+------+| id | username | userpassword | age | sex |+----+----------+----------------------------------+-----+------+| 6 | DDD | *dsfjksp;flke | 32 | 1 || 8 | FFF | bc9c74cd849e1f1b99b16b0d92292bf6 | 50 | 0 |+----+----------+----------------------------------+-----+------+2 rows in set (0.00 sec)
加入对查询结果的排序操作
[ORDER BY {col_name | expr | position} [ASC|DESC],...]
在上面说到了ASC
是升序,DESC
是降序。
例如查询users2
表中的所有字段,降序排列,并展示出排序结果后的第4
行开始的两行的数据。
mysql> SELECT * FROM users2 ORDER BY id DESC LIMIT 3,2;+----+----------+---------------+-----+------+| id | username | userpassword | age | sex |+----+----------+---------------+-----+------+| 6 | DDD | *dsfjksp;flke | 32 | 1 || 4 | CCC | *asfjdhia | 26 | 1 |+----+----------+---------------+-----+------+2 rows in set (0.00 sec)
将查询的结果放入另一张表中
新建一张数据表users3
,将在users2
表中查询到的数据放入users3
表中。
mysql> CREATE TABLE users3( -> id TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, -> username VARCHAR(20) -> );Query OK, 0 rows affected (0.03 sec)mysql> SELECT * FROM users3;Empty set (0.02 sec)mysql> INSERT users3(username) SELECT username FROM users2 WHERE age>30;Query OK, 3 rows affected (0.00 sec)Records: 3 Duplicates: 0 Warnings: 0mysql> SELECT * FROM users3;+----+----------+| id | username |+----+----------+| 1 | BBB || 2 | DDD || 3 | FFF |+----+----------+3 rows in set (0.00 sec)
阅读全文
1 0
- MySQL学习笔记(二):查找记录方法-SELECT(详细)
- MySQL学习笔记(七)查找记录
- mysql学习记录(二)
- mysql学习笔记(三)select语句
- mysql模糊查找英文可以查找中文不行(详细记录)
- MySQL学习笔记(二)
- mysql学习笔记(二)
- Mysql学习笔记(二)
- MySQL学习笔记(二)
- mysql学习笔记(二)
- Mysql学习笔记(二)
- MySQL学习笔记(二)
- MySQL学习笔记(二)
- MySql学习笔记(二)
- python 学习笔记记录(二)
- MATLAB学习笔记 函数记录(二)
- 数组排序,查找方法。(学习笔记)
- 数据库学习纪要(二十三):MySQL-3-SELECT
- 10-22 warfare and logistics(最短路树)
- OpenShift Origin v3.7 配置NFS存储
- 74. Search a 2D Matrix(第七周)
- VPS安装记录
- 软件工程(C编码实践篇) 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
- MySQL学习笔记(二):查找记录方法-SELECT(详细)
- linux中的动态链接库和静态链接库
- notifyDataSetChanged无效
- mongodb 数据库封装DB类
- 记录一个BUG,用==赋值。。。GG
- code
- leetcode练习 Course Schedul
- 泛型委托
- Spring cloud oauth2 研究第N天