您的位置:首页 > 数据库

SQL经典入门(第5版)学习笔记

2015-08-07 10:54 399 查看
主要熟悉下稍微复杂点的sql语句跟存储过程。总的来说,记一句sql大概就能应付很多情况了:

select from__where__group by__having__order by

SQL命令类型:

数据定义语言:DDL

数据操作语言:DML

数据查询语言:DQL

数据控制语言:DCL

数据管理命令

事务控制命令

1.建表

create table users(
id int(11) primary key auto_increment,
username varchar(20),
age int(11),
gender char(1),
birthday date,
city varchar(20),
salary float(20)
)


2.修改表结构(加一列,名为company,类型varchar(20)):

alter table users add column company varchar(20);


3.插入一条记录

insert into users(username,age,gender,birthday,city,salary,company) values('路飞',17,'男','1991-08-30','杭州',20000.00,'移动');


4.修改记录(只改了两个字段):

update users set age=19,gender='女' where username='路飞'


5.删除数据:

delete from user where id=1;


6.查询(大项):

select * from users;


下面的查询主要根据这张表来



order by 子句:让输出以某种方式进行排序,默认升序

select * from users where gender='男' order by age;




降序

select * from users where gender='男' order by age desc;




统计数量(*可以替换为某一列):

select count(*) from users;


比较操作符(只举一例):

相等:=

不等:<>

大于:>

小于:<

select username,age from users where age<30;




逻辑操作符:

IS NULL;

BETWEEN;

IN;

LIKE;

EXISTS;

UNIQUE;

IS NULL(与null值进行比较):

select * from users where username is null;




BETWEEN(找位于之间的记录):

select * from users where salary between 400 and 800;




IN(与指定列表比较,这个指定列表也可以是查询结果,这里这给出简单的列表):

select * from users where id in(1,4,8)




还可以是 select * from users where id in(这里面也是个select语句);

LIKE(多用于模糊查询):通配符有两个,“%””_”

where salary like ‘200%’ : 以200开头的值

where salary like ‘%200%’ :包含200的

where salary like ‘2_%_%’ :以2开头,长度至少为三的值

where salary like ‘_00%’ :第二和第三个字符是0的值

where salary like ‘%2’ :以2结尾的值

where salary like ‘_2%3’ :第二位为2,结尾为3的值

where salary like ‘2___3’ :以2开头,结尾为3,长度为五的值

select * from users where salary like '200%'




EXIST(用于指定表里是否存在特定条件的记录,与IN很像,只是这个子查询里的表是能查自己的表,IN是不能的):这个东西有够狗血的,exist子句并不返回数据,返回的是true,false,然后进行外部的主查询。

select * from users where exists (select * from users where id<5)

这条语句表达的意思是如果users表里有id<5的记录就进行外部的主查询,返回表中所有数据,注意并不是只返回id<5的数据(我扣了半天才发现)。

ALL,SOME,ANY(感觉没什么卵用,不给例子了,用到的时候再查好了)

AND OR :

select * from users where id>1 and id<5;




select * from users where id=1 or id>10;




求反操作符:这些就不说了,没几个意思

<>,!=

NOT BETWEEN

NOT IN

NOT LIKE

IS NOT NULL

NOT EXISTS

NOT UNIQUE

算术操作符: 就+ - * / ;不说了。

查询汇总: COUNT , SUM , AVG ,MAX, MIN

COUNT:前面用过了

SUM: SUM([DISTINCT] COULUMN NAME)distinct会丢弃重复的数据进行计算。

select SUM(age) from users


结果为391

select SUM(distinct age) from users


结果为355,小于391,因为我表中有重复的年龄被丢弃了。

AVG(平均数):

select AVG(age) from users


MAX(最大值):

select MAX(age) from users


MIN(最小值):

select MIN(age) from users


数据排序与数组:

GROUP BY (select中出现的字段,除汇总函数外,全部要在group by 中出现,书上是这么说的,但我用mysql试了下,不在也可以–!)

ORDER BY

select username,city,age,count(*) from users group by city order by count(*)




其实这个查询是有问题的,弗兰奇也是在南京的,但被覆盖了。

HAVING(相当于再加一个条件,HAVING对GROUP BY 的作用就相当于WHERE 对 SELECT的作用)

select username,city,age,count(*) from users group by city having age >20 order by count(*)




相对于上条查询19岁的路飞君已经被踢掉了。

到这里,基本的语句已经差不多了,后面还有的子查询,关联查询,组合查询,存储过程,事件,外键关联什么的,就下次再说吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: