[关闭]
@jaiminc 2015-07-18T12:37:48.000000Z 字数 2289 阅读 1479

MySQL笔记(二)

MySQL


三、查询入门

3.1 查询机制

在MySQL中利用用户名和密码登录后,则为用户创建一个数据库连接,该连接从应用程序发出请求后一直保持,知道释放连接(quit)或服务器关闭连接。执行SQL语句请求发送到服务器端时,服务器在执行语句前会进行如下检查:
1. 用户是否有权执行该语句?
2. 用户是否有权限访问目标数据?
3. 语句语法是否正确?

3.2 查询语句

字句名称 使用目的
select 结果应该有哪些列
from 所要提取数据的表,以及表如何连接
where 筛选数据的条件
group by 对具有相同列值的行进行分组
having 过滤不需要的组
order by 排序

3.3 select语句

在实际数据库服务中,select语句是最后被解析的

select子句用在所有可能的列中,选择查询结果集要包含哪些列
select子句还可以利用:
- 字符
- 表达式,如 salary*14
- 内建函数
- 自定义函数调用

3.3.1 列的别名

  1. select emp_id,
  2. 'ACTIVE' as status,
  3. emp_id*3.14 as empid_x_pi,
  4. upper(lname) as last_name_upper
  5. from employee;

其中as可省

3.3.2 去除重复的行

利用关键字 distinct

  1. select distinct cust_id
  2. from account;

3.4 from子句

3.4.1表的概念

在“表”的宽泛定义下,有三种表:
- 永久表:使用create table创建的表
- 临时表:子查询所返回的表
- 虚拟表:使用create view子句创建的视图

视图:
定义视图:

  1. create view employee_vw as
  2. select emp_id,fname,lname,year(start_data) as start_year
  3. from employee;

使用视图:

  1. select emp_id,start_year
  2. from employee_vw;

3.4.2 表连接

第五章详解

3.4.3 定义表别名

当在单个查询中连接多个表时,需要在select、where等子句中致命引用哪个表。有两种在from子句之外引用表的方式:
- 使用完整的名称
- 为表指定别名

  1. select e.emp_id,e.fname,e.lname,d.name dept_name
  2. from employee as e inner join department as d
  3. on e.dept_id=d.dept_id;

3.5 where子句

where子句可包含逻辑运算和表达式,例如:

  1. select emp_id,fname,lname,start_date,title
  2. from employee
  3. where (title='Head Teller' and start_date>'2006-01-01')
  4. or(title='Teller' and start_date>'2007-01-01');

3.6 group by和having子句

首先为每个部门计算其所含的雇员数,然后返回至少包含2个雇员的部门名称:

  1. select d.name,count(e.emp_id) as num_employees
  2. from department as d inner join employee as e
  3. on d.dept_id=e.dept_id
  4. group by d.name
  5. having count(e.emp_id)>2;

3.7 order by子句

order by子句用于对结果几种的原始列数据或是根据列数据计算的表达式结果进行排序
可以调价添加多个要排序的列

3.7.1 升降序

asc->升序(默认)
desc->降序
用法:order by <name> desc;

MySQL包含limit子句可以对排序后的数据进行过滤,只显示其中前x行:limit x;

3.7.2 根据表达式排序

对后三位进行排序:order by right(<name>,3);

3.7.3 根据数字占位符排序

根据查询返回的第二个和第五个列进行排序:order by 2,5


四、过滤

4.1 条件评估

4.2 构建条件

4.3 条件类型

4.3.1 相等条件

4.3.2 范围条件

4.3.3 成员条件

in操作符:

  1. select account_id,product_cd,cust_id,avail_balance
  2. from account
  3. where product_cd in ('CHK','SAV','CD','MM');

使用子查询:
在上一个查询中,如果4种产品类型的列都是account,可以使用对product表的子查询来获取这4种产品代码而不是显示地列举:

  1. select account_id,product_cd,cust_id,avail_balance
  2. from account
  3. where product_cd in (select product_cd
  4. from product
  5. where product_type_cd='account');
  6. /*子查询返回了包含4个值的集合*/

4.3.4 匹配条件

通配符 匹配
_ 1个字符
% 任意数目的字符(包括0个)

用搜索表达式构建条件时,使用like操作符:

  1. select lname
  2. from employee
  3. where lname like '_a%e%';

使用正则表达式

4.4 null

正:where superior_emp_id is null
误:where superior_emp_id = null


添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注