您的位置:首页 > 数据库 > MySQL

MySQl学习记录3 :查询笔记

2015-04-28 22:17 567 查看
参考书目 《SQL学习指南》

select子句

select语句中的第一个组成部分, 但实际在数据库服务中,他是最后被评估的. ,

select name from department;
select * from department;


select子句用于在所有可能的列中, 选择查询结果集要包含哪些列.

select 还可以添加:

字符, 比如数字或字符串

表达式;

调用内建函数, 比如ROUND(transaction.amount,2)

用户自定义函数调用

select emp_id,
'ACTIVE',
emp_id * 3.14159,
upper(lname)
from employee;




列的别名

select emp_id,
'ACTIVE' status,
emp_id * 3.14159 empid_x_pi,
upper(lname) last_name_upper
from employee;




去重复的行

select distinct emp_id from employee


from

表分类:

- 永久表(create table)

- 临时表(子查询所返回的表)

- 虚拟表(create view创建)

子查询产生的表

select e.emp_id,e.fname,e.lname
from (select emp_id,fname,lname,start_date,title from employee) e;


视图

create view employee_vm as
select emp_id,fname,lname,
YEAR(start_date) start_year
from employee;


上面的代码创建了视图

select * from employee_vm;


表连接

从两个表提取数据

没明白

select employee.emp_id, employee.fname,
employee.lname,department.name dept_name
from employee INNER JOIN department ON department.dept_id = employee.dept_id


定义别名

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


where

selcet 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');


group by 和 having

groupby用来分组, having用来对分组后的数据进行过滤

select d.name, count(e.emp_id) mum_employees
FROM department d INNER JOIN employee e
on d.dept_id=e.dept_id
group by d.name
having COUNT(e.emp_id)>2;


order by

orderby 对id和product同时排序.

select open_emp_id,  product_cd from account order by open_emp_id, product_cd


降序

select open_emp_id,  product_cd from account order by open_emp_id desc


根据表达式排序

right(str,len)最后len个字符排序

select cust_id, cust_type_cd, city, state, fed_id
from customer
order by RIGHT(fed_id, 3)


根据数字占位符排序

第二列五列排序

select status, account_id, custmer_id, avalable balance
from employee
order by 2,5;


匹配条件

通配符

通配符匹配
_一个字符
%任意数目的字符(包括0)
select lname
from employee
where lname like '_a%e%'


正则表达式

select emp_id, fname, lname
from employee
where lname regexp '^[FG]'


查找姓氏中以a为第二个字符,并且e在a后面任意位置出现的.

select * FROM individual where fname regexp '^.a.*e.*';
select * FROM individual where fname like '_a%e%'


null 关键字

使用null要记住:

- 表达式可以为null但不能等于null

- 两个null值彼此不能判断为相等

为了测试表达式是否为null,需要使用null操作符

select emp_id, fname, lname, superior_emp_id
from employee
where superior_emp_id IS null


检查列中数据是否被赋值,可以用IS NOT NULL.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: