数据库基础(二)--简单的数据查询

  数据查询是数据库的核心操作。MYSQL提供了select语句进行数据查询,该语句具有灵活的使用方式和丰富的功能。select语句既可以完成简单的单表查询,也可以完成复杂的连接查询和嵌套查询。

  其一般格式为:

select [ all | distinct ] <目标列表达式>[ ,<目标列表达式>]...

from <表名或列名> [ ,<表名或列名>...] | (<select 语句>) [as] <别名>

[where <条件表达式> ]

[group by <列名1> [having] <条件表达式>]

[order by <列名2>[asc|desc] ];

以下以这两个表格为例:

address
AddressId PersonId City State
1 2 new york city new york
2 2 waston city waston
person
Person FirstName LastName
1 John Allan
2 Mike Li

目录

 

扫描二维码关注公众号,回复: 13636880 查看本文章

一、单表查询

  1.选择表中的若干项

  2.选择表中的若干元组

  3.order by语句

  4.聚集函数

  5.group by语句

二、连接查询

  1.等值与非等值连接查询

  2.自身连接

  3.外连接(通过join)

  4.多表连接


一、单表查询

  1.选择表中的若干项

  ①选择表中的若干列

查询语句:
 select FirstName,LastName from person;

  输出表格:

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| John      | Allan    |
| Mike      | Li       |
+-----------+----------+
2 rows in set (0.00 sec)

  ②查询全部列

查询语句:
select * from person;
等价于
select PersonId,FirstName,LastName from person;

  输出表格:

+----------+-----------+----------+
| PersonId | FirstName | LastName |
+----------+-----------+----------+
|        1 | John      | Allan    |
|        2| Mike      | Li       |
+----------+-----------+----------+
2 rows in set (0.00 sec)

③查询经过计算的值

查询语句:
 select 2020-PersonId,FirstName from person;

   输出表格:

+---------------+-----------+
| 2020-PersonId | FirstName |
+---------------+-----------+
|          2019 | John      |
|          2018 | Mike      |
+---------------+-----------+
2 rows in set (0.01 sec)

  2.选择表中的若干元组

  ①消除重复的行

  不消除:

查询语句:
select PersonId from address;

  输出表格:

+----------+
| PersonId |
+----------+
| 2        |
| 2        |
+----------+
2 rows in set (0.00 sec)

消除:

查询语句:
select distinct PersonId from address;

  输出表格:

+----------+
| PersonId |
+----------+
| 2        |
+----------+
1 row in set (0.01 sec)

   如果想要结果去掉表中的重复行,必须指定distinct。如果没有指定distinct关键词,则默认为all,即保留结果表中取之重复的行。

  ②查询满足条件的结果

where子句常用的查询条件
查询条件 谓词
比较 =,<,>,<=,>=,!=,<>,!>,!<;not+上述比较运算符
确定范围 between and , not between and
确定集合 in , not in
字符匹配 like , not like
空值 is null , is not null
多重条件 and , or , not

  Ⅰ.比较大小

查询语句:
select * from person where FirstName='John';

  输出表格:

+----------+-----------+----------+
| PersonId | FirstName | LastName |
+----------+-----------+----------+
|        1 | John      | Allan    |
+----------+-----------+----------+
1 row in set (0.00 sec)

  Ⅱ.确定范围

查询语句:
 select * from person where PersonId between 1 and 2;

  输出表格:

+----------+-----------+----------+
| PersonId | FirstName | LastName |
+----------+-----------+----------+
|        1 | John      | Allan    |
|        2 | Mike      | Li       |
+----------+-----------+----------+
2 rows in set (0.00 sec)

    Ⅲ.确定集合

查询语句:
select * from person where PersonId in(1,2);
注意:如果数据类型是字符串的话,需要加上单引号。

  输出表格:

+----------+-----------+----------+
| PersonId | FirstName | LastName |
+----------+-----------+----------+
|        1 | John      | Allan    |
|        2 | Mike      | Li       |
+----------+-----------+----------+
2 rows in set (0.01 sec)

   Ⅳ.字符匹配

查询语句:
select * from person where FirstName like '_o%';

输出表格:

+----------+-----------+----------+
| PersonId | FirstName | LastName |
+----------+-----------+----------+
|        1 | John      | Allan    |
+----------+-----------+----------+
1 row in set (0.00 sec)

   谓词like可以用来进行字符匹配。like之后的匹配串可以是一个完整的字符串,亦可以含有通配符%和_;

  %(百分号)代表任意长度(长度可以为0)的字符串;_(下划线)代表任意单个字符。

  如果用户要查询的字符串本身就含有通配符%和_,这是就要使用ESCAPE‘<换码字符>’。

  例如:name like 'DB\_Design' ESCAPE '\';  其中,ESCAPE'\'表示“\”为换码字符,这样紧跟字符串后面的字符“_”不再具有通配符的意义,转义为普通的"_"字符。

  Ⅴ.涉及空值的查询

查询语句:
 select * from person where FirstName is not null;

  输出表格:

+----------+-----------+----------+
| PersonId | FirstName | LastName |
+----------+-----------+----------+
|        1 | John      | Allan    |
|        2 | Mike      | Li       |
+----------+-----------+----------+
2 rows in set (0.00 sec)

Ⅵ.多重条件查询

查询语句:
select * from person where FirstName='John' and PersonId>=1;

  输出表格:

+----------+-----------+----------+
| PersonId | FirstName | LastName |
+----------+-----------+----------+
|        1 | John      | Allan    |
+----------+-----------+----------+
1 row in set (0.00 sec)

  3.order by语句

  用户可以使用order by子句对查询结果按照一个或多个属性列的升序(asc)或降序(desc)排列,默认值为升序。

查询语句:
select * from person order by PersonId desc;

   输出表格:

+----------+-----------+----------+
| PersonId | FirstName | LastName |
+----------+-----------+----------+
|        2 | Mike      | Li       |
|        1 | John      | Allan    |
+----------+-----------+----------+
2 rows in set (0.00 sec)

   对于空值,排序时显示的顺序由具体系统实现来决定。各个系统的实现可以不同,但保持一致就行。

  4.聚集函数

  为了进一步方便用户,增强检索功能,sql提供了许多聚集函数。

聚集函数
聚集函数 功能
count(*) 统计元组个数
count([ distinct | all ] <列名>) 统计一列中值的个数
sum([ distinct | all ] <列名>) 计算一列值的总和(数值型数据)
avg([ distinct | all ] <列名>) 统计一列值的平均值(数值型数据)
max([ distinct | all ] <列名>) 求一列中的最小值
min([ distinct | all ] <列名>) 求一列中的最大值

    聚集函数只能用于select子句和group by中的having子句。

操作语句:
 select count(*) from person;

  输出表格:

+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)

查询语句:
select avg(PersonId)from person;

   输出表格:

+---------------+
| avg(PersonId) |
+---------------+
|        1.5000 |
+---------------+
1 row in set (0.00 s

  5.group by语句

    group by子句将查询结果按某一列或多列的值分组,值相等的为一组,分组后聚集函数将作用于每一个组,即每一组都有一个函数值。

查询语句:
select AddressId,count(PersonId) from address group by AddressId;

  输出表格:

+-----------+-----------------+
| AddressId | count(PersonId) |
+-----------+-----------------+
|         1 |               1 |
|         2 |               1 |
+-----------+-----------------+
2 rows in set (0.00 sec)

二、连接查询

  1.等值与非等值连接查询

查询语句:
select * from person,address where person.PersonId=address.PersonId;

    输出表格:

+----------+-----------+----------+-----------+----------+---------------+----------+
| PersonId | FirstName | LastName | AddressId | PersonId | City          | State    |
+----------+-----------+----------+-----------+----------+---------------+----------+
|        2 | Mike      | Li       |         1 | 2        | new york city | new york |
|        2 | Mike      | Li       |         2 | 2        | waston city   | waston   |
+----------+-----------+----------+-----------+----------+---------------+----------+

  2.自身连接

  一个与其自身进行连接,成为表的自身连接。

查询语句:
select first.FirstName,second.LastName from person first,person second where first.PersonId=second.PersonId;

  输出表格:

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| John      | Allan    |
| Mike      | Li       |
+-----------+----------+
2 rows in set (0.00 sec)

  3.外连接(通过join)

  外连接也是比较重要的,详情请看  MySql基础(三)--join的用法

  4.多表连接

    可以进行两表或两表以上的连接

查询语句:
select student,sno,sname,cname,grade from student,sc,course where student.sno=sc.sno and sc.cno=course.cno;

  以上就是数据库MySQL中较为简单的数据查询了,完成基本的日常操作是没问题的。

猜你喜欢

转载自blog.csdn.net/qq_43238335/article/details/106487950