《MySQL》 查询及匹配条件

  1. 查询及匹配条件
     问题
    练习常见的SQL查询及条件设置
  1. 创建stu_info表,并插入数据
  2. 练习常见SQL查询及条件设置
     步骤
    实现此案例需要按照如下步骤进行。
    步骤一:根据任务要求建立员工档案表stu_info
    1)在test库中创建stu_info表
    以root用户登入MySQL服务器:
    [root@dbsvr1 ~]# mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 5
    Server version: 5.6.15 MySQL Community Server (GPL)

Copyright © 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>
打开test库:
mysql> USE test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
创建stu_info表,包括name、gender、age三个字段:
mysql> CREATE TABLE stu_info(
-> name varchar(12) NOT NULL,
-> gender enum(‘boy’,‘girl’) DEFAULT ‘boy’,
-> age int(3) NOT NULL
-> );
Query OK, 0 rows affected (0.03 sec)
确认表结构:
mysql> DESC stu_info;
±-------±-------------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±-------±-------------------±-----±----±--------±------+
| name | varchar(12) | NO | | NULL | |
| gender | enum(‘boy’,‘girl’) | YES | | boy | |
| age | int(3) | NO | | NULL | |
±-------±-------------------±-----±----±--------±------+
3 rows in set (0.01 sec)
2)准备测试表格
向建立的stu_info表插入几条测试记录
mysql> INSERT INTO stu_info VALUES
-> (‘Jim’,‘girl’,24),
-> (‘Tom’,‘boy’,21),
-> (‘Lily’,‘girl’,20),
-> (‘Jerry’,‘boy’,27),
-> (‘Mike’,‘boy’,21)
-> ;
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
确认stu_info表的所有记录内容:
mysql> SELECT * FROM stu_info;
±------±-------±----+
| name | gender | age |
±------±-------±----+
| Jim | girl | 24 |
| Tom | boy | 21 |
| Lily | girl | 20 |
| Jerry | boy | 27 |
| Mike | boy | 21 |
±------±-------±----+
5 rows in set (0.00 sec)
步骤二:练习常见SQL查询及条件设置
1)常用的表记录统计函数
查询stu_info表一共有多少条记录(本例中为5条):
mysql> SELECT count() FROM stu_info;
±---------+
| count(
) |
±---------+
| 5 |
±---------+
1 row in set (0.00 sec)
计算stu_info表中各学员的平均年龄、最大年龄、最小年龄:
mysql> SELECT avg(age),max(age),min(age) FROM stu_info;
±---------±---------±---------+
| avg(age) | max(age) | min(age) |
±---------±---------±---------+
| 22.6000 | 27 | 20 |
±---------±---------±---------+
1 row in set (0.03 sec)
计算stu_info表中男学员的个数:
mysql> SELECT count(gender) FROM stu_info WHERE gender=‘boy’;
±--------------+
| count(gender) |
±--------------+
| 3 |
±--------------+
1 row in set (0.00 sec)
2)字段值的数值比较
列出stu_info表中年龄为21岁的学员记录:
mysql> SELECT * FROM stu_info WHERE age=21;
±-----±-------±----+
| name | gender | age |
±-----±-------±----+
| Tom | boy | 21 |
| Mike | boy | 21 |
±-----±-------±----+
2 rows in set (0.00 sec)
列出stu_info表中年龄超过21岁的学员记录:
mysql> SELECT * FROM stu_info WHERE age>21;
±------±-------±----+
| name | gender | age |
±------±-------±----+
| Jim | girl | 24 |
| Jerry | boy | 27 |
±------±-------±----+
2 rows in set (0.00 sec)
列出stu_info表中年龄大于或等于21岁的学员记录:
mysql> SELECT * FROM stu_info WHERE age>=21;
±------±-------±----+
| name | gender | age |
±------±-------±----+
| Jim | girl | 24 |
| Tom | boy | 21 |
| Jerry | boy | 27 |
| Mike | boy | 21 |
±------±-------±----+
4 rows in set (0.00 sec)
列出stu_info表中年龄在20岁和24岁之间的学员记录:
mysql> SELECT * FROM stu_info WHERE age BETWEEN 20 and 24;
±-----±-------±----+
| name | gender | age |
±-----±-------±----+
| Jim | girl | 24 |
| Tom | boy | 21 |
| Lily | girl | 20 |
| Mike | boy | 21 |
±-----±-------±----+
4 rows in set (0.00 sec)
3)多个条件的组合
列出stu_info表中年龄小于23岁的女学员记录:
mysql> SELECT * FROM stu_info WHERE age < 23 AND gender=‘girl’;
±-----±-------±----+
| name | gender | age |
±-----±-------±----+
| Lily | girl | 20 |
±-----±-------±----+
1 row in set (0.00 sec)
列出stu_info表中年龄小于23岁的学员,或者女学员的记录:
mysql> SELECT * FROM stu_info WHERE age < 23 OR gender=‘girl’;
±-----±-------±----+
| name | gender | age |
±-----±-------±----+
| Jim | girl | 24 |
| Tom | boy | 21 |
| Lily | girl | 20 |
| Mike | boy | 21 |
±-----±-------±----+
4 rows in set (0.00 sec)
如果某个记录的姓名属于指定范围内的一个,则将其列出:
mysql> SELECT * FROM stu_info WHERE name IN
-> (‘Jim’,‘Tom’,‘Mickey’,‘Minnie’);
±-----±-------±----+
| name | gender | age |
±-----±-------±----+
| Jim | girl | 24 |
| Tom | boy | 21 |
±-----±-------±----+
2 rows in set (0.00 sec)
4)使用SELECT做数学计算
计算1234与5678的和:
mysql> SELECT 1234+5678;
±----------+
| 1234+5678 |
±----------+
| 6912 |
±----------+
1 row in set (0.00 sec)
计算1234与5678的乘积:
mysql> SELECT 12345678;
±----------+
| 1234
5678 |
±----------+
| 7006652 |
±----------+
1 row in set (0.00 sec)
计算1.23456789除以3的结果:
mysql> SELECT 1.23456789/3;
±---------------+
| 1.23456789/3 |
±---------------+
| 0.411522630000 |
±---------------+
1 row in set (0.00 sec)
输出stu_info表各学员的姓名、15年后的年龄:
mysql> SELECT name,age+15 FROM stu_info;
±------±-------+
| name | age+15 |
±------±-------+
| Jim | 39 |
| Tom | 36 |
| Lily | 35 |
| Jerry | 42 |
| Mike | 36 |
±------±-------+
5 rows in set (0.00 sec)
5)使用模糊查询,LIKE引领
以下划线 _ 匹配单个字符,% 可匹配任意多个字符。
列出stu_info表中姓名以“J”开头的学员记录:
mysql> SELECT * FROM stu_info WHERE name LIKE ‘J%’;
±------±-------±----+
| name | gender | age |
±------±-------±----+
| Jim | girl | 24 |
| Jerry | boy | 27 |
±------±-------±----+
2 rows in set (0.00 sec)
列出stu_info表中姓名以“J”开头且只有3个字母的学员记录:
mysql> SELECT * FROM stu_info WHERE name LIKE ‘J__’;
±-----±-------±----+
| name | gender | age |
±-----±-------±----+
| Jim | girl | 24 |
±-----±-------±----+
1 row in set (0.00 sec)
6)使用正则表达式,REGEXP引领
列出stu_info表中姓名以“J”开头且以“y”结尾的学员记录:
mysql> SELECT * FROM stu_info WHERE name REGEXP ‘^J.*y ; + + + + n a m e g e n d e r a g e + + + + J e r r y b o y 27 + + + + 1 r o w i n s e t ( 0.00 s e c ) m y s q l &gt; S E L E C T F R O M s t u i n f o W H E R E n a m e L i k e J + + + + n a m e g e n d e r a g e + + + + J e r r y b o y 27 + + + + 1 r o w i n s e t ( 0.00 s e c ) s t u i n f o J y m y s q l &gt; S E L E C T F R O M s t u i n f o W H E R E n a m e R E G E X P J y &#x27;; +-------+--------+-----+ | name | gender | age | +-------+--------+-----+ | Jerry | boy | 27 | +-------+--------+-----+ 1 row in set (0.00 sec) 效果等同于: mysql&gt; SELECT * FROM stu_info WHERE name Like &#x27;J%y&#x27;; +-------+--------+-----+ | name | gender | age | +-------+--------+-----+ | Jerry | boy | 27 | +-------+--------+-----+ 1 row in set (0.00 sec) 列出stu_info表中姓名以“J”开头或者以“y”结尾的学员记录: mysql&gt; SELECT * FROM stu_info WHERE name REGEXP &#x27;^J|y ’;
±------±-------±----+
| name | gender | age |
±------±-------±----+
| Jim | girl | 24 |
| Lily | girl | 20 |
| Jerry | boy | 27 |
±------±-------±----+
3 rows in set (0.00 sec)
效果等同于:
mysql> SELECT * FROM stu_info WHERE name Like ‘J%’ OR name Like ‘%y’;
±------±-------±----+
| name | gender | age |
±------±-------±----+
| Jim | girl | 24 |
| Lily | girl | 20 |
| Jerry | boy | 27 |
±------±-------±----+
3 rows in set (0.00 sec)
7)按指定的字段排序,ORDER BY
列出stu_info表的所有记录,按年龄排序:
mysql> SELECT * FROM stu_info GROUP BY age;
±------±-------±----+
| name | gender | age |
±------±-------±----+
| Lily | girl | 20 |
| Tom | boy | 21 |
| Jim | girl | 24 |
| Jerry | boy | 27 |
±------±-------±----+
4 rows in set (0.00 sec)
因默认为升序(Ascend)排列,所以上述操作等效于:
mysql> SELECT * FROM stu_info GROUP BY age ASC;
±------±-------±----+
| name | gender | age |
±------±-------±----+
| Lily | girl | 20 |
| Tom | boy | 21 |
| Jim | girl | 24 |
| Jerry | boy | 27 |
±------±-------±----+
4 rows in set (0.00 sec)
若要按降序(Descend)排列,则将ASC改为DESC即可:
mysql> SELECT * FROM stu_info GROUP BY age DESC;
±------±-------±----+
| name | gender | age |
±------±-------±----+
| Jerry | boy | 27 |
| Jim | girl | 24 |
| Tom | boy | 21 |
| Lily | girl | 20 |
±------±-------±----+
4 rows in set (0.00 sec)
8)限制查询结果的输出条数,LIMIT
查询stu_info表的所有记录,只列出前3条:
mysql> SELECT * FROM stu_info LIMIT 3;
±-----±-------±----+
| name | gender | age |
±-----±-------±----+
| Jim | girl | 24 |
| Tom | boy | 21 |
| Lily | girl | 20 |
±-----±-------±----+
3 rows in set (0.00 sec)
列出stu_info表中年龄最大的3条学员记录:
mysql> SELECT * FROM stu_info GROUP BY age DESC LIMIT 3;
±------±-------±----+
| name | gender | age |
±------±-------±----+
| Jerry | boy | 27 |
| Jim | girl | 24 |
| Tom | boy | 21 |
±------±-------±----+
3 rows in set (0.00 sec)
9)分组查询结果,GROUP BY
针对stu_info表,按性别分组,分别统计出男、女学员的人数:
mysql> SELECT gender,count(gender) FROM stu_info GROUP BY gender;
±-------±--------------+
| gender | count(gender) |
±-------±--------------+
| boy | 3 |
| girl | 2 |
±-------±--------------+
2 rows in set (0.00 sec)
列出查询字段时,可以通过AS关键字来指定显示别名,比如上述操作可改为:
mysql> SELECT gender AS ‘性别’,count(gender) AS ‘人数’
-> FROM stu_info GROUP BY gender;
±-------±-------+
| 性别 | 人数 |
±-------±-------+
| boy | 3 |
| girl | 2 |
±-------±-------+
2 rows in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/xiaozhedeitzhilu/article/details/93123729