sql实例教程

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350