设为首页收藏本站 JeeStudy企业开发官网①

JEE Study|JAVA EE|企业级开发学习网

 找回密码
 立即加入

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 2165|回复: 0
打印 上一主题 下一主题

MySQL8.0大师之路:第9章:MySQL教程-9.6 查询数据

[复制链接]

219

主题

221

帖子

1418

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1418

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

跳转到指定楼层
楼主
发表于 2020-4-3 21:47:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.查询所有的数据
mysql> select * from student;
+------+----------+------------+
| id   | name     | birth      |
+------+----------+------------+
|    1 | zhangsan | 1997-01-01 |
|    2 | lisi     | 2008-09-10 |
+------+----------+------------+
2 rows in set (0.00 sec)

2.查询特定的行:查询名字是lisi的数据
mysql> select * from student where name='lisi';
+------+------+------------+
| id   | name | birth      |
+------+------+------------+
|    2 | lisi | 2008-09-10 |
+------+------+------------+
1 row in set (0.01 sec)

3.查询固定列,例如,查询出表中的所有名字

mysql> select name from student;
+----------+
| name     |
+----------+
| zhangsan |
| lisi     |
+----------+
2 rows in set (0.00 sec)


4.排序:根据id倒序排列
mysql> select * from student order by id desc;
+------+----------+------------+
| id   | name     | birth      |
+------+----------+------------+
|    2 | lisi     | 2008-09-10 |
|    1 | zhangsan | 1997-01-01 |
+------+----------+------------+
2 rows in set (0.00 sec)


5.日期计算,例如计算每个人的年龄
mysql> select *,TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age from student;
+------+-----------+--------------+--------+
| id       | name        | birth             | age       |
+------+-----------+--------------+--------+
|    1     | zhangsan | 1997-01-01   |   23      |
|    2     | lisi            | 2008-09-10   |   11      |
+------+-----------+--------------+--------+
2 rows in set (0.00 sec)


6.查询生日是1月份的人
mysql> select * from student WHERE MONTH(birth) = 1;
+------+------------+--------------+
| id       | name         | birth              |
+------+------------+--------------+
|  1       | zhangsan   | 1997-01-01   |
+------+------------+--------------+
1 row in set (0.00 sec)


6.计算下个月过生日的人,比如这里我们再添加两条数据
[root@CentOS8 ~]# cat /angel/student.txt
3,wangwu,1919-05-01
4,zhaoliu,2018-08-10


现在的日期时间:
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2020-04-03 21:28:12 |
+---------------------+
1 row in set (0.00 sec)



计算下个月过生日的人:
mysql> select * from student WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));
+------+--------+------------+
| id   | name   | birth      |
+------+--------+------------+
|    3 | wangwu | 1919-05-01 |
+------+--------+------------+
1 row in set (0.00 sec)


7.NULL值的处理
在MySQL中 NULL表示“缺少未知值(a missing unknown value)”,并且与其他值的处理方式有所不同。
对于 NULL 的操作,务必 使用IS NULL和IS NOT NULL运算符。
注意:绝对不能使用算术比较运算符(>或<或<>)来操作 NULL。
在MySQL中,0或NULL表示false,其他表示true。布尔运算的默认真值是1




8.模式匹配(模糊查询)
查询操作符不要用 = or <>,要使用 LIKE or NOT LIKE
1)查询名字中以 l 开头的人
mysql> select * from student where name like 'l%';
+------+------+------------+
| id   | name | birth      |
+------+------+------------+
|    2 | lisi | 2008-09-10 |
+------+------+------------+
1 row in set (0.01 sec)

2).查询名字中以u结尾的人名
mysql> select * from student where name like '%u';
+------+---------+------------+
| id   | name    | birth      |
+------+---------+------------+
|    3 | wangwu  | 1919-05-01 |
|    4 | zhaoliu | 2018-08-10 |
+------+---------+------------+
2 rows in set (0.00 sec)



3).查询名字中包含 g 这个字母的人
mysql> select * from student where name like '%g%';
+------+----------+------------+
| id   | name     | birth      |
+------+----------+------------+
|    1 | zhangsan | 1997-01-01 |
|    3 | wangwu   | 1919-05-01 |
+------+----------+------------+
2 rows in set (0.00 sec)

4).查询名字的长度是4位的人
mysql> select * from student where name like '____';
+------+------+------------+
| id   | name | birth      |
+------+------+------------+
|    2 | lisi | 2008-09-10 |
+------+------+------------+
1 row in set (0.00 sec)


这里用的是4个下划线_


5).正则表达式
MySQL提供的另一种模式匹配使用扩展的正则表达式。在使用此类型的模式是否匹配时,请使用REGEXP_LIKE()函数(或REGEXP或RLIKE运算符,它们是REGEXP_LIKE()的同义词)。

1)    .匹配任何单个字符。
2)    [abc]匹配a,b或c。
3)    [a-z]匹配任何字母,而[0-9]匹配任何数字。
4)    *匹配零个或多个在其之前的事物的实例。例如,x *匹配任意数量的x个字符,[0-9] *匹配任意数量的数字,而.*匹配任意数量的任何字符。
如果正则表达式模式匹配成功,则该模式匹配成功。(这与LIKE模式匹配不同,LIKE模式匹配仅在模式匹配整个值时才成功。)要定位模式以使其必须与被测试值的开头或结尾相匹配,请在开头使用^或在结尾使用$。


例如:
为了演示,我们的数据如下:
mysql> select * from student;
+---+------------------+--------------+
| id   | name                  |       birth       |
+---+------------------+--------------+
|  1   | zhangsan            | 1997-01-01 |
|  2   | lisi                       | 2008-09-10 |
|  3   | wangwu              | 1919-05-01 |
|  4   | zhaoliu                | 2018-08-10 |
|  5   | ZHOUXINGXING | 1956-08-25 |
|  6   | DASHENG           | 1919-12-23 |
+------+----------------+-------------+
6 rows in set (0.00 sec)





<1>查询名字中以z开头的人
mysql> select * from student WHERE REGEXP_LIKE(name, '^z');
+----+--------------------+--------------+
|  id   | name                    | birth              |
+------+------------------+--------------+
|    1  | zhangsan              | 1997-01-01   |
|    4  | zhaoliu                  | 2018-08-10   |
|    5  | ZHOUXINGXING   | 1956-08-25   |
+------+------------------+--------------+
3 rows in set (0.00 sec)


<2>查询名字中以Z开头的人,并区分大小
这三种方式都可以
SELECT * FROM student WHERE REGEXP_LIKE(name, '^Z' COLLATE utf8mb4_0900_as_cs);
SELECT * FROM student WHERE REGEXP_LIKE(name, BINARY '^Z');
SELECT * FROM student WHERE REGEXP_LIKE(name, '^Z', 'c');


mysql> SELECT * FROM student WHERE REGEXP_LIKE(name, '^Z', 'c');
+------+-------------------+------------+
|  id      | name                   | birth           |
+------+-------------------+------------+
|  5       | ZHOUXINGXING | 1956-08-25 |
+------+-------------------+------------+
1 row in set (0.00 sec)


<3>找出以g结尾的人
mysql> SELECT * FROM student WHERE REGEXP_LIKE(name, 'g$');
+------+-------------------+--------------+
|  id      |    name                 |     birth         |
+------+-------------------+--------------+
|  5       | ZHOUXINGXING  | 1956-08-25  |
|  6       | DASHENG            | 1919-12-23  |
+------+-------------------+--------------+
2 rows in set (0.00 sec)


<4>查询名字中包含o的人
mysql> select * from student WHERE REGEXP_LIKE(name, 'o');
+------+-------------------+--------------+
|   id     |       name              |     birth        |
+------+-------------------+--------------+
|   4      | zhaoliu                 | 2018-08-10  |
|   5      | ZHOUXINGXING  | 1956-08-25  |
+------+-------------------+--------------+
2 rows in set (0.00 sec)


<5>查询名字中包含4个字符的人
mysql> select * from student WHERE REGEXP_LIKE(name, '^....$');
+------+---------+--------------+
| id       | name     |   birth           |
+------+---------+--------------+
|    2     | lisi          | 2008-09-10  |
+------+---------+--------------+
1 row in set (0.00 sec)

上面的语句也可以写成:mysql> select * from student WHERE REGEXP_LIKE(name, '^.{4}$');
{4}重复的次数















































知识改变命运!

JAVA EE 学习     JAVA EE 资料
JEE Study:企业级开发学习网!
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

QQ|Archiver|手机版|小黑屋|JEE Study ( 京ICP备16036936   JeeStudy企业开发官网①

GMT+8, 2024-12-2 15:34 , Processed in 0.210848 second(s), 28 queries .

Powered by JeeStudy!

© 2008-2020 JEE Study 企业级开发学习网

快速回复 返回顶部 返回列表