sql语法

1.模糊查询

SELECT * FROM mytable WHERE u_name LIKE '%01%'

2.创建视图

create view stu_mj
as
select student.NO,student.NAME,student.SEX,student.BIRTHDAY,student.MEMBER,major.MAJOR
from student,major
where student.MAJOR_KEY=major.MAJOR_KEY

3. 为table添加备注

alter table 表名 comment '注释';

4. 结果排序

select *
from z_users 
order by followers_count desc   #desc 从大到小 asc 从小到大

5.注释

我试了下mysql只能用“#”或‘/*  */’。

不能用‘--’,要出错。

http://zhidao.baidu.com/question/174428030.html

6. BETWEEN

SELECT * FROM Persons
WHERE LastName
BETWEEN 'Adams' AND 'Carter'

7. IN 

in比连写几个or方便,而且执行效率更高

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)

http://www.w3school.com.cn/sql/sql_in.asp  SQL IN 操作符

8. group by 分组

select province, count(*) from users 
group by province                    #按照province来进行统计

9. having

于group by 一起用,取代where,作用和where相同。having支持所有where 的操作符。

select province, count(*) from users 
group by province
having count(*)<100

10. select子句顺序

(1) select

(2) from

(3) where

(4) group by

(5) having

(6) order by

(7) limit

11. inner join,  left join,  right join

left join: 对于left表,即使没有匹配也会列出。

right join: 对于right表,即使没有匹配也会列出。

http://www.jb51.net/article/15386.htm  超详细mysql left join,right join,inner join用法分析

inner join和where用法差不多。

WHERE子句中使用的连接语句,在数据库语言中,被称为隐性连接。INNER JOIN……ON子句产生的连接称为显性连接。

WHERE 和INNER JOIN产生的连接关系,没有本质区别,结果也一样。但是!隐性连接随着数据库语言的规范和发展,已经逐渐被淘汰,比较新的数据库语言基本上已经抛弃了隐性连接,全部采用显性连接了。

http://blog.csdn.net/qingtanlang/article/details/2133816  inner join 和where 区别

12. 自连接和子查询

自连接和子查询基本上可以互换,但是自连接在效率上可能要高。

例子:某物品(ID为DT)可能存在问题,因此想要知道生产该物品的供应商生产的其他物品是否也有问题。查询要求首先找到ID为DTNTR的物品的供应商,然后找出这个供应商的全部物品。

子查询

select prod_id, prod_name
from products
where vend_id = ( select vend_id 
                from products 
                where prod_id = 'DT')

自连接

select prod_id, prod_name
from products as p1, products as p2
where p1.vend_id=p2.vend_id
    and p2.prod_id='DT'

13. union 

连接2条或多条select语句。

union重复值只选取1条,要显示全部重复值用union all

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

http://www.w3school.com.cn/sql/sql_union.asp  SQL UNION 和 UNION ALL 操作符

14. delete

删除行

delete from users
where id=1000

15. 触发器 trigger

一个表最多只有6个触发器: insert,update,delete之前和之后。

create trigger neworder after insert on orders
for each row select NEW.order_num

新表用NEW关键字,旧表用OLD关键字。

16. 管理事物处理 commit, rollback,savepoint。

start transaction;
insert into xxx
values(6,'asdas');
commit

事务一般都是自动提交的,也就是说单写insert,delete就可以了。但是要是写了start transaction,事务就不会自动提交,要等到commit命令才会提交。

start transaction;
insert into xxx
values(6,'asdas');
rollback

使用savepoint,rollback只到savepoint的位置。

start transaction;
insert into xxx
values(8,'asdas');
savepoint d1;
insert into xxx
values(9,'asdas');
rollback to d1;
commit;

17. 用户管理

查看用户

use mysql;
select user from user

创建用户

create user ben identified by '123'

查看权限

show grants for ben

赋予权限

grant select on table1 to ben

18. where exists用法

例子:找寻和某用户location相同的用户,通过自查询

exists返回真假 

select * from tag_users as a
where exists(select 1 from tag_users where  name='不胖大海' and location=a.location)

 http://www.cnblogs.com/diction/archive/2008/01/18/1043844.html    in和exists的区别与SQL执行效率分析

例子:从users选择tmp表中没有的id

select * from users  as t
where not exists
(select 1 from tmp  as a where a.id=t.id )

用in来执行相同的查询

select * from users  as t
where t.id not in 
(select id from tmp)
原文地址:https://www.cnblogs.com/phoenix13suns/p/2811506.html