美文网首页
sql实例教程

sql实例教程

作者: Joey_coder | 来源:发表于2019-12-05 23:27 被阅读0次

    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

    相关文章

      网友评论

          本文标题:sql实例教程

          本文链接:https://www.haomeiwen.com/subject/laxsgctx.html