@jaiminc
2015-07-18T12:37:48.000000Z
字数 2289
阅读 1576
MySQL
在MySQL中利用用户名和密码登录后,则为用户创建一个数据库连接,该连接从应用程序发出请求后一直保持,知道释放连接(quit)或服务器关闭连接。执行SQL语句请求发送到服务器端时,服务器在执行语句前会进行如下检查:
1. 用户是否有权执行该语句?
2. 用户是否有权限访问目标数据?
3. 语句语法是否正确?
字句名称 | 使用目的 |
---|---|
select | 结果应该有哪些列 |
from | 所要提取数据的表,以及表如何连接 |
where | 筛选数据的条件 |
group by | 对具有相同列值的行进行分组 |
having | 过滤不需要的组 |
order by | 排序 |
在实际数据库服务中,select语句是最后被解析的
select子句用在所有可能的列中,选择查询结果集要包含哪些列
select子句还可以利用:
- 字符
- 表达式,如 salary*14
- 内建函数
- 自定义函数调用
select emp_id,
'ACTIVE' as status,
emp_id*3.14 as empid_x_pi,
upper(lname) as last_name_upper
from employee;
其中as可省
利用关键字 distinct
select distinct cust_id
from account;
在“表”的宽泛定义下,有三种表:
- 永久表:使用create table创建的表
- 临时表:子查询所返回的表
- 虚拟表:使用create view子句创建的视图
视图:
定义视图:
create view employee_vw as
select emp_id,fname,lname,year(start_data) as start_year
from employee;
使用视图:
select emp_id,start_year
from employee_vw;
第五章详解
当在单个查询中连接多个表时,需要在select、where等子句中致命引用哪个表。有两种在from子句之外引用表的方式:
- 使用完整的名称
- 为表指定别名
select e.emp_id,e.fname,e.lname,d.name dept_name
from employee as e inner join department as d
on e.dept_id=d.dept_id;
where子句可包含逻辑运算和表达式,例如:
select emp_id,fname,lname,start_date,title
from employee
where (title='Head Teller' and start_date>'2006-01-01')
or(title='Teller' and start_date>'2007-01-01');
首先为每个部门计算其所含的雇员数,然后返回至少包含2个雇员的部门名称:
select d.name,count(e.emp_id) as num_employees
from department as d inner join employee as e
on d.dept_id=e.dept_id
group by d.name
having count(e.emp_id)>2;
order by子句用于对结果几种的原始列数据或是根据列数据计算的表达式结果进行排序
可以调价添加多个要排序的列
asc->升序(默认)
desc->降序
用法:order by <name> desc;
MySQL包含limit子句可以对排序后的数据进行过滤,只显示其中前x行:
limit x;
对后三位进行排序:order by right(<name>,3);
根据查询返回的第二个和第五个列进行排序:order by 2,5
where start_date between '2005-01-01' and '2007-01-01';
in操作符:
select account_id,product_cd,cust_id,avail_balance
from account
where product_cd in ('CHK','SAV','CD','MM');
使用子查询:
在上一个查询中,如果4种产品类型的列都是account,可以使用对product表的子查询来获取这4种产品代码而不是显示地列举:
select account_id,product_cd,cust_id,avail_balance
from account
where product_cd in (select product_cd
from product
where product_type_cd='account');
/*子查询返回了包含4个值的集合*/
通配符 | 匹配 |
---|---|
_ | 1个字符 |
% | 任意数目的字符(包括0个) |
用搜索表达式构建条件时,使用like操作符:
select lname
from employee
where lname like '_a%e%';
使用正则表达式
正:
where superior_emp_id is null
误:where superior_emp_id = null