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

mysql简单的单表查询详解

2015-09-09 22:39 585 查看
mysql简单的单表查询详解

MySQL的查询操作:
单表查询:简单查询
多表查询:连续查询
联合查询:
选择和投影:
投影:挑选要显示的字段
选择:挑选符合条件的行
投影:SELECT 字段1, 字段2, ... FROM tb_name;
SELECT * FROM tb_name;
选择:SELECT 字段1, ... FROM tb_name WHERE 子句;
布尔条件表达式
mysql> CREATE TABLE students (SID INT UNSIGNED AUTO_INCREMENT NOT NULL UNIQUE KEY ,Name CHAR (30) NOT NULL , Age TINYINT UNSIGNED NOT NULL , Gender ENUM('F','M') NOT NULL,Tutor CHAR(30));
Query OK, 0 rows affected (0.01 sec)
mysql> desc students;
+--------+---------------------+------+-----+---------+----------------+
| Field  | Type                | Null | Key | Default | Extra          |
+--------+---------------------+------+-----+---------+----------------+
| SID    | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| Name   | char(30)            | NO   |     | NULL    |                |
| Age    | tinyint(3) unsigned | NO   |     | NULL    |                |
| Gender | enum('F','M')       | NO   |     | NULL    |                |
| Tutor  | char(30)            | YES  |     | NULL    |                |
+--------+---------------------+------+-----+---------+----------------+
【插入数据】
mysql> insert into students values (1,'Guo Jing',27,'M','Song Jiang'),(2,'Yang Guo',28,'M','Hu Sanniang'),(3,'Guo polu',21,'M','Jii Baoyu');


mysql> INSERT INTO students VALUES (4,'Xue Baochai',19,'F','Rong Momo'),(5,'Xia Yuhe',37,'F','Shi Qian'),(6,'Wu Yong',51,'M','Lin Daiyu');
【显示数据】
mysql> select * from students;
+-----+-------------+-----+--------+-------------+
| SID | Name        | Age | Gender | Tutor       |
+-----+-------------+-----+--------+-------------+
|   1 | Guo Jing    |  27 | M      | Song Jiang  |
|   2 | Yang Guo    |  28 | M      | Hu Sanniang |
|   3 | Guo polu    |  21 | M      | Jii Baoyu   |
|   4 | Xue Baochai |  19 | F      | Rong Momo   |
|   5 | Xia Yuhe    |  37 | F      | Shi Qian    |
|   6 | Wu Yong     |  51 | M      | Lin Daiyu   |
+-----+-------------+-----+--------+-------------+


【只显示25到40岁的】
mysql> select * from students where Age between 25 and 40;
+-----+----------+-----+--------+-------------+
| SID | Name     | Age | Gender | Tutor       |
+-----+----------+-----+--------+-------------+
|   1 | Guo Jing |  27 | M      | Song Jiang  |
|   2 | Yang Guo |  28 | M      | Hu Sanniang |
|   5 | Xia Yuhe |  37 | F      | Shi Qian    |
+-----+----------+-----+--------+-------------+


【名字,年龄 只显示25到40岁的】 between and
mysql> select Name,Age from students where Age between 25 and 40;
+----------+-----+
| Name     | Age |
+----------+-----+
| Guo Jing |  27 |
| Yang Guo |  28 |
| Xia Yuhe |  37 |
+----------+-----+


【更新表的数据】
mysql> update students set Gender='M'where Name='Wu Yong';


【显示 以 X开头的名字】like ‘X%’
mysql> select * from students where Name like 'X%';
+-----+-------------+-----+--------+-----------+
| SID | Name        | Age | Gender | Tutor     |
+-----+-------------+-----+--------+-----------+
|   4 | Xue Baochai |  19 | F      | Rong Momo |
|   5 | Xia Yuhe    |  37 | F      | Shi Qian  |
+-----+-------------+-----+--------+-----------+
【显示 以 X开头的名字】增则表达式 RLIKE
mysql> select * from students where Name Rlike '^X.*';
+-----+-------------+-----+--------+-----------+
| SID | Name        | Age | Gender | Tutor     |
+-----+-------------+-----+--------+-----------+
|   4 | Xue Baochai |  19 | F      | Rong Momo |
|   5 | Xia Yuhe    |  37 | F      | Shi Qian  |
+-----+-------------+-----+--------+-----------+


【添加null值】
mysql> insert into students values(7,'tom',11,'M','jerry'),(8,'tomy',13,'M',null);
mysql> select * from students;
+-----+-------------+-----+--------+-------------+
| SID | Name        | Age | Gender | Tutor       |
+-----+-------------+-----+--------+-------------+
|   1 | Guo Jing    |  27 | M      | Song Jiang  |
|   2 | Yang Guo    |  28 | M      | Hu Sanniang |
|   3 | Guo polu    |  21 | M      | Jii Baoyu   |
|   4 | Xue Baochai |  19 | F      | Rong Momo   |
|   5 | Xia Yuhe    |  37 | F      | Shi Qian    |
|   6 | Wu Yong     |  51 | M      | Lin Daiyu   |
|   7 | tom         |  11 | M      | jerry       |
|   8 | tomy        |  13 | M      | NULL        |
+-----+-------------+-----+--------+-------------+
【查找显示空值 】is null
mysql> select * from students where Tutor is null;
+-----+------+-----+--------+-------+
| SID | Name | Age | Gender | Tutor |
+-----+------+-----+--------+-------+
|   8 | tomy |  13 | M      | NULL  |
+-----+------+-----+--------+-------+
【查找显示非空值 】is not null
mysql> select * from students where Tutor is not null;
+-----+-------------+-----+--------+-------------+
| SID | Name        | Age | Gender | Tutor       |
+-----+-------------+-----+--------+-------------+
|   1 | Guo Jing    |  27 | M      | Song Jiang  |
|   2 | Yang Guo    |  28 | M      | Hu Sanniang |
|   3 | Guo polu    |  21 | M      | Jii Baoyu   |
|   4 | Xue Baochai |  19 | F      | Rong Momo   |
|   5 | Xia Yuhe    |  37 | F      | Shi Qian    |
|   6 | Wu Yong     |  51 | M      | Lin Daiyu   |
|   7 | tom         |  11 | M      | jerry       |
+-----+-------------+-----+--------+-------------+


【布尔条件表达式操作符】:
=
<=>
<>
<
<=
>
>=
IS NULL
IS NOT NULL
LIKE: 支持的通配符: %(任意长度的任意字符), _(任意单个字符)
RLIKE, REGEXP: 支持使用正则表达式
IN: 判断指定字段的值是否在给定在列表中;
【组合条件测试】:
NOT, !
AND, &&
OR, ||
【多条件】BETWEEN ... AND ...: 位于指定的范围之间 where Age>25 and Gender='M'
mysql> select * from students where Age>25 and Gender='M';
mysql> select * from students where Age>25 && Gender='M';
mysql> select * from students where Age > 25 and Gender = 'M';
+-----+----------+-----+--------+-------------+
| SID | Name     | Age | Gender | Tutor       |
+-----+----------+-----+--------+-------------+
|   1 | Guo Jing |  27 | M      | Song Jiang  |
|   2 | Yang Guo |  28 | M      | Hu Sanniang |
|   6 | Wu Yong  |  51 | M      | Lin Daiyu   |
+-----+----------+-----+--------+-------------+
【显示 顺序】 order by Name ;asc升序;desc降序;
mysql> select * from students where Age>25 and Gender='M' order by Name desc;
+-----+----------+-----+--------+-------------+
| SID | Name     | Age | Gender | Tutor       |
+-----+----------+-----+--------+-------------+
|   2 | Yang Guo |  28 | M      | Hu Sanniang |
|   6 | Wu Yong  |  51 | M      | Lin Daiyu   |
|   1 | Guo Jing |  27 | M      | Song Jiang  |
+-----+----------+-----+--------+-------------+


【聚合函数】:
SUM(), AVG(), MAX(), MIN(), COUNT()个数

【计算年龄之和】
mysql> select sum(Age) from students;
+----------+
| sum(Age) |
+----------+
|      207 |
+----------+
【支持where】
mysql> select sum(Age) from students where Age>25 && Gender='M' ;
+----------+
| sum(Age) |
+----------+
|      106 |
+----------+
【 GROUP BY 分组:统计F、M 各个年龄之和】
mysql> select Gender,sum(Age) from students group by Gender;
+--------+----------+
| Gender | sum(Age) |
+--------+----------+
| F      |       56 |
| M      |      151 |
+--------+----------+


【插入一个字段】
mysql> alter table students add ClassID TINYINT UNSIGNED;
mysql> select * from students;
+-----+-------------+-----+--------+-------------+---------+
| SID | Name        | Age | Gender | Tutor       | ClassID |
+-----+-------------+-----+--------+-------------+---------+
|   1 | Guo Jing    |  27 | M      | Song Jiang  |    NULL |
|   2 | Yang Guo    |  28 | M      | Hu Sanniang |    NULL |
|   3 | Guo polu    |  21 | M      | Jii Baoyu   |    NULL |
|   4 | Xue Baochai |  19 | F      | Rong Momo   |    NULL |
|   5 | Xia Yuhe    |  37 | F      | Shi Qian    |    NULL |
|   6 | Wu Yong     |  51 | M      | Lin Daiyu   |    NULL |
|   7 | tom         |  11 | M      | jerry       |    NULL |
|   8 | tomy        |  13 | M      | NULL        |    NULL |
+-----+-------------+-----+--------+-------------+---------+
【update 数值 】
mysql> update students set ClassID=2 where SID=1;
mysql> select * from students;
+-----+-------------+-----+--------+-------------+---------+
| SID | Name        | Age | Gender | Tutor       | ClassID |
+-----+-------------+-----+--------+-------------+---------+
|   1 | Guo Jing    |  27 | M      | Song Jiang  |       2 |
|   2 | Yang Guo    |  28 | M      | Hu Sanniang |       3 |
|   3 | Guo polu    |  21 | M      | Jii Baoyu   |       3 |
|   4 | Xue Baochai |  19 | F      | Rong Momo   |       1 |
|   5 | Xia Yuhe    |  37 | F      | Shi Qian    |       2 |
|   6 | Wu Yong     |  51 | M      | Lin Daiyu   |       1 |
|   7 | tom         |  11 | M      | jerry       |       1 |
|   8 | tomy        |  13 | M      | NULL        |       4 |
+-----+-------------+-----+--------+-------------+---------+
【统计每个ClassID 对应的人数 】
mysql> select ClassID,count(*) from students group by ClassID;
+---------+----------+
| ClassID | count(*) |
+---------+----------+
|       1 |        3 |
|       2 |        2 |
|       3 |        2 |
|       4 |        1 |
+---------+----------+
【统计每个ClassID 对应的人数,并显示年龄之和 】
mysql> select ClassID,count(*) ,sum(Age) from students group by ClassID;
+---------+----------+----------+
| ClassID | count(*) | sum(Age) |
+---------+----------+----------+
|       1 |        3 |       81 |
|       2 |        2 |       64 |
|       3 |        2 |       49 |
|       4 |        1 |       13 |
+---------+----------+----------+


【having 统计显示,每个ClassID人数大于等于2的】
mysql> select ClassID from students group by ClassID having count(Name) >=2;
+---------+
| ClassID |
+---------+
|       1 |
|       2 |
|       3 |
+---------+


【统计显示,每个ClassID,年龄之和大于等于2的】
mysql> select ClassID from students group by ClassID having sum(Age) <=50;
+---------+
| ClassID |
+---------+
|       3 |
|       4 |
+---------+
【limit】
limit 一个参数就显示几行
mysql> select *from students limit 3;
+-----+----------+-----+--------+-------------+---------+
| SID | Name     | Age | Gender | Tutor       | ClassID |
+-----+----------+-----+--------+-------------+---------+
|   1 | Guo Jing |  27 | M      | Song Jiang  |       2 |
|   2 | Yang Guo |  28 | M      | Hu Sanniang |       3 |
|   3 | Guo polu |  21 | M      | Jii Baoyu   |       3 |
+-----+----------+-----+--------+-------------+---------+
limit 两个参数用,隔开,第一个为跳过,第二个显示行数
mysql> select *from students limit 2,4;
+-----+-------------+-----+--------+-----------+---------+
| SID | Name        | Age | Gender | Tutor     | ClassID |
+-----+-------------+-----+--------+-----------+---------+
|   3 | Guo polu    |  21 | M      | Jii Baoyu |       3 |
|   4 | Xue Baochai |  19 | F      | Rong Momo |       1 |
|   5 | Xia Yuhe    |  37 | F      | Shi Qian  |       2 |
|   6 | Wu Yong     |  51 | M      | Lin Daiyu |       1 |
+-----+-------------+-----+--------+-----------+---------+


练习:导入hellodb.sql,以下操作在students表上执行
1、以ClassID分组,显示每班的同学的人数;
2、以Gender分组,显示其年龄之和;
3、以ClassID分组,显示其平均年龄大于25的班级;
4、以Gender分组,显示各组中年龄大于25的学员的年龄之和;
1,mysql> select ClassID ,count(Name) from students group by ClassID;
+---------+-------------+
| ClassID | count(Name) |
+---------+-------------+
| 1 | 3 |
| 2 | 2 |
| 3 | 2 |
| 4 | 1 |
+---------+-------------+
2,mysql> select Gender,sum(Age) from students group by Gender; +--------+----------+ | Gender | sum(Age) | +--------+----------+ | F | 56 | | M | 151 | +--------+----------+
3,mysql> select ClassID,avg(Age) from students group by ClassID having avg(Age) >=25 ;
+---------+----------+
| ClassID | avg(Age) |
+---------+----------+
| 1 | 27.0000 |
| 2 | 32.0000 |
+---------+----------+
4,mysql> select Gender,sum(Age) from students where Age >=25 group by Gender ;
+--------+----------+
| Gender | sum(Age) |
+--------+----------+
| F | 37 |
| M | 106 |
+--------+----------+


【重复数据只显示一次】distinct
mysql> select ClassID from students;
+---------+
| ClassID |
+---------+
|       2 |
|       3 |
|       3 |
|       1 |
|       2 |
|       1 |
|       1 |
|       4 |
+---------+
mysql> select distinct ClassID from students;
+---------+
| ClassID |
+---------+
|       2 |
|       3 |
|       1 |
|       4 |
+---------+


【SELECT语句的执行流程:】
FROM clause --> WHERE clause --> GROUP BY --> HAVING clause --> ORDER BY ... --> SELECT --> LIMIT

【SELECT语句:】mysql> help select;
DISTINCT:指定的结果相同的只显示一次;mysql> help distinct;
SQL_CACHE:缓存于查询缓存中;
SQL_NO_CACHE:不缓存查询结果;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息