mysql基础(19)_高级数据操作之查询数据【一】(查询主句介绍)

查询数据

完整的查询指令是:Select select选项 字段列表 from 数据源 where 条件 group by 分组 having 条件 order by 排序 limit 限制;
其中where之前的部分称之为查询主句,where之后部分称之为查询五子句。下面将介绍下查询主句:

select选项
"select选项"表示系统该如何对待查询得到的结果,它分为两类:
1、All:默认的,表示保存所有的记录
2、Distinct:去重,去除重复的记录,只保留一条(所有的字段都相同情况下)

mysql> select all * from copy_table;
+------+
| name |
+------+
| good |
| b    |
| c    |
| d    |
| good |
| b    |
| c    |
| d    |
| a    |
| b    |
| c    |
| d    |
| a    |
| b    |
| c    |
| d    |
+------+
16 rows in set (0.19 sec)

mysql> select distinct * from copy_table;
+------+
| name |
+------+
| good |
| b    |
| c    |
| d    |
| a    |
+------+
5 rows in set (0.11 sec)

字段列表
前面学过*代表所有字段,同时单个表查询字段数据不难,但有的时候需要从多张表获取数据(多表获取数据方式待讲),在获取数据的时候,可能存在不同表中有同名的字段,这个时候需要将同名的字段命名成不同名的,此时可以利用别名(alias)实现(alias缩写为as,可忽略):
基本语法:字段名 [as] 别名       

mysql> select distinct name name1,name as name2 from copy_table;
+-------+-------+
| name1 | name2 |
+-------+-------+
| good  | good  |
| b     | b     |
| c     | c     |
| d     | d     |
| a     | a     |
+-------+-------+
5 rows in set (0.00 sec)

From数据源
from是为前面的查询提供数据,数据源只要是一个符合二维表结构的数据即可。

单表数据:from 表名
多表数据:从多张表获取数据,基本语法:from 表1,表2... [where 条件]

注意: 如果不加条件直接进行查询,则会出现以下效果,这种结果我们称之为 笛卡尔乘积.笛卡尔乘积公式 : A表中数据条数 * B表中数据条数 = 笛卡尔乘积.

mysql> select * from student;
+----+------+
| id | name |
+----+------+
|  1 | 小明 |
|  2 | 小可 |
|  3 | 小艾 |
|  4 | 小新 |
+----+------+
4 rows in set (0.35 sec)

mysql> select * from teacher;
+------+------+
| name | age  |
+------+------+
| 小明 |   26 |
| 小可 |   28 |
| 小艾 |   22 |
+------+------+
3 rows in set (0.00 sec)

mysql> select * from student,teacher;
+----+------+------+------+
| id | name | name | age  |
+----+------+------+------+
|  1 | 小明 | 小明 |   26 |
|  1 | 小明 | 小可 |   28 |
|  1 | 小明 | 小艾 |   22 |
|  2 | 小可 | 小明 |   26 |
|  2 | 小可 | 小可 |   28 |
|  2 | 小可 | 小艾 |   22 |
|  3 | 小艾 | 小明 |   26 |
|  3 | 小艾 | 小可 |   28 |
|  3 | 小艾 | 小艾 |   22 |
|  4 | 小新 | 小明 |   26 |
|  4 | 小新 | 小可 |   28 |
|  4 | 小新 | 小艾 |   22 |
+----+------+------+------+
12 rows in set (0.00 sec)

结果:两张表的记录数相乘,字段数拼接
本质:从第一张表取出一条记录,去拼凑第二张表的所有记录,保留所有结果。得到的结果为笛卡尔积,这个结果除了给数据库造成压力,没有其他意义,应该尽量避免出现笛卡尔积

动态数据
From后面跟的数据不是一个实体表,而是一个从表中查询出来得到的二维结果表(子查询)
基本语法:from (select 字段列表 from 表)as 别名;       备注:[as] 别名;不仅可以跟字段做别名,还可以跟表做别名,同理[as] 别名中as可忽略。

-- [as] 别名;不仅可以跟字段做别名,还可以跟表做别名,as可忽略
mysql> select all * from (select name from student) as name_student;
+------+
| name |
+------+
| 小明 |
| 小可 |
| 小艾 |
| 小新 |
+------+
4 rows in set (0.00 sec)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值