sql实例教程

2019-12-05  本文已影响0人  Joey_coder

SQL实例教程

现有person表一张,记录F公司的所有在职人员信息。表中的信息包括员工名字,年龄,薪酬

id name age salary
1 Joey 23 4000
2 Monica 22 3300
3 Ross 25 8000
4 Ross 70 12000
... ... ... ...

查询语句

SQL中的查找使用select语句
你可以通过select查找person表中所有的信息

select * from person; 

有些SQL语句需要以;结尾
如果你只想查找表中的名字

select name from person;

如果名字叫做Ross的人比较多,可以使用distinct去掉重复,只显示一个Ross

select distinct name from person;

如果你想知道关于Joey的信息,你可以使用where语句

select * from person where name='Joey';

但是,你发现有若干个Joey,而你只想查找年纪23的Joey,那你可以使用and语句

select * from person where name='joey' and age=23;

person表中有很多的名字叫Ross,你想把他们都找出来,并让他们按照年纪进行升序排序

select * from person where name='Ross' order by age;

如果你想让Ross的信息以年龄降序排列输出,可以

select * from person where name='Ross' order by age desc;

插入语句

有一天,公司来了一个采购部的经理助手,名字叫Rachel,年纪24岁,薪酬为4500。现在需要插入person表格中,你可以使用insert into语句

insert into person values ('Rachel',24,4500);

或者

insert into person (name,age,salary) values ('Rachel',24,4500);

update语句

在工作了几个月后,新来的Rachel同学深受Ross的赏识,于是决定给Rachel加薪到6000,你可以使用update-set-where调整Rachel的薪酬

update person set salary=6000 where name='Rachel';

删除语句

然而好景不长,又过了几个月,Rachel和Ross大吵了一架。伤心的Rachel决定离开F公司,另谋高就。我们可以使用delete from...where...语句删除表里面Rachel的信息

delete from person where name = 'Rachel';

limit语句

F公司对公司员工的年龄进行一次统计,于是你得找出公司中年龄最大的三个员工,你可以使用limit限制输出的员工信息条数

select name, age from person order by age desc limit 3;

like模糊查找

有一天,你闲得很疼,所以你决定查询一下除了Joey外,公司里面有多少人的名字中间带有"o"

select name from person where name like '%o%';

%匹配一个或多个字符,于是发现了Monica和Phoebe
如果你只想要匹配一个字符,可以使用_
[name]表示匹配任意name中一个字符,你可以通过一下方式查找名字不以"J","P","M" 开头的人

select name from person where name like '[!JPM]%';

in操作符

in操作符可以替代or,如果你想查找公司里面所有叫Joey和Phoebe的员工信息

select * from person where name in ('Joey','Phoebe');

between语句

F公司的员工信息是按照入职时间录入的,假设你想要查找在Joey入职后,到Phoebe入职期间,公司有多少个新职员

select * from person where name between 'Joey' and 'Phoebe';

Alias语句

Alias可以指定别名,如果你想查询F公司里面名字叫Joey,工资为8000的员工信息时,你可以

select name as n, salary as s from person;

join语句

现在假设F公司里面还有一张表vacation,表格里面记录了公司的各个员工的剩余休假天数

id day pid
1 6 3
2 7 5
3 0 2
... ... ...

由于记录vacation表的时候使用的是员工的id,即本表中的pid,为了将两个表中的信息串联起来,于是你这样写:

select person.name,vacation.day from person,vacation where person.id = vacation.pid;

当然你也可以使用join语句

select person.name, vacation.day from person inner join vacation on person.id = vacation.pid;

union语句

如果你想要从person表和vacation表中查询数据,并把结果合并,可以使用union

select name from person
union 
select day from vacation;

union默认去除相同的查询结果,如果你想要获取原始的查询结果可以使用union all


create语句

为了保险起见,F公司让你将person表进行备份,并将备份数据导入到备份数据库F.mdb中,于是你先要创建一个数据库F

create database F;
use F;

接着,你需要创建一个为名personcopy的备份表

create table personcopy
(
id int,
name varchar(255),
age int,
salary int
);

然后将person中的数据copy到备份表personcopy中

insert into personcopy select * form person;

这样就完成了备份工作,但,其实你还有一种更加简单的方法

create table usercopy(
select * from user
);

constraints约束

当你以第一种方法备份完数据库之后,主管马上找到了你,因为你在create table时犯了一些微小但是严重的错误:personcopy的列未添加约束。

主管建议你给id,age列都加上not null约束,并且作为表的唯一标识的id需要加上primary key约束以及自增auto_increment

create table personcopy (
id int not full auto_increament,
name not full,
salary 
primary key (id)
);

alter语句

尽管你已经做得很好了,但是还是有一些细节忽略了,personcopy中的age不能小于18,salary默认应该为0。已经重建了一次表格的你不想再重建了,于是你使用alter来添加约束

alter table personcopy
alter salary set default 0;
alter table personcopy
add check (age>18);

又过了几天,主管又来提需求了,他需要你在personcopy中添加一个新的列,工龄workingage

alter table personcopy
add workingage int check(workingage>0);

drop语句

公司的老员工Gunther因为长期得不到公司的重视,于是,他做了一件极其不光彩的事

drop column salary;

他将person中的salary给删除掉了!

drop table person;

接着Gunther干脆把整个person给删掉了

drop database F;

然后Gunther跑路了


未命名.png
上一篇下一篇

猜你喜欢

热点阅读