美文网首页
常用常考sql语句总结

常用常考sql语句总结

作者: richy_ | 来源:发表于2016-09-01 22:30 被阅读692次

    1 表级操作

    CRUD:增加(Create)、查询(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)

    C新建

    --新建学生表
    create table Student (
    name Int Not Null UNIQUE AUTO_INCREMENT Primary key,
    Name varchar(20) not null,
    age int null,
    gender varchar(4) null ); 
    
    --插入不存在的数据
    insert into student (name,age,gender) value ('andy',30,'女');
    --插入查询的数据
    insert into student (name,age,gender) value (select name,age,gender from student where id>10);
    

    D删除

    --删除学生表
    drop table Student
    
    --删除数据项
    delete from student where id<10;
    

    U更新

    --新增phone列
    alter Table Student add (phone varchar(15) null);
    --删除phone列
    alter table student Drop colum phone;
    --修改phone列
    alter table student modify phone carchar(13) not null;
    --变更字段scor是旧字段名,score是新字段名
    alter table studnet change scor score int not null;
    
    --更新
    update student set age = age+1 where id>10 and id<=20;
    

    R查询

    语法

    SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]… 
    FROM <表名或视图名>[,<表名或视图名>]… 
    [WHERE <条件表达式>] 
    [GROUP BY <列名> [HAVING <条件表达式>]] 
    [ORDER BY <列名> [ASC|DESC]…]
    

    举例

    select * from student where id>10
    group by age having avg(age)>20
    order by id desc;
    
    --查询指定列
    select name,age from student where id>10;
    select sum(age) from student;
    --只显示结果不同的项
    select distinct age from student;
    --使用算数表达式
    select name,sal*13 as sal_all from emp;
    --使用like,in运算符号
    --%匹配一个或多个字符,_匹配一个字符
    select * from emp where name like 'S_T%' or age >50;
    select * from emp where job in ('clerk','analyst');
    --为空或非空
    select * from emp where sal is null;--is not null;
    --排序
    select * from emp order by deptno asc,sal desc;
    
    SELECT MAX(sal),MIN(age),AVG(sal),SUM(sal) from emp;
    select * from emp where sal = (select max(sal) from emp);
    --group by 和having
    --group by 用来对查询结果进行分组统计
    --having 用来限制分组显示结果
    SELECT deptno,MAX(sal),AVG(sal) FROM emp GROUP BY deptno;
    SELECT deptno, job, AVG(sal),MIN(sal) FROM emp group by deptno,job having AVG(sal)<2000;
    

    多表查询

    select e.name,e.sal,d.dname from emp e,dept d where e.deptno = d.deptno order by d.deptno;
    --自连接
    SELECT er.ename, ee.ename mgr_name from emp er, emp ee where er.mgr=ee.empno;
    --嵌套查询
    SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp where ename='SMITH');
    --any(比任何一个都) 和all(比所有都) 
    SELECT ename,sal,deptno FROM emp WHERE sal> ANY (SELECT sal FROM emp WHERE deptno=30);
    --SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MIN(sal) FROM emp WHERE deptno=30);
    --多列子查询
    SELECT * FROM emp where (job,deptno) = (select job,deptno from emp where name = 'Bob');
    --更新数据
    UPDATE emp SET(job, sal, comm)=(SELECT job, sal, comm FROM emp where ename='SMITH') WHERE ename='SCOTT';
    -- 外连接(outer join):如果数据不存在,也会出现在连接结果中。 
    -- 左外连接 left join 如果数据不存在,左表记录会出现,而右表为null填充 
    -- 右外连接 right join 如果数据不存在,右表记录会出现,而左表为null填充
    SELECT er.ename, ee.ename mgr_name from emp er left join emp ee where er.mgr=ee.empno;
    
    --聚合函数
    --求和
    sum(age)
    --平均值
    avg(age);
    --计数
    count(age);
    --最大 、 最小值
    max(),min();
    

    2 MySql语句(后期再补充)

    --连接数据库
    mysql -h127.0.0.1 -uroot -p123456
    
    --查看数据库
    show database;
    
    --使用数据库
    use XXX;
    
    --查看表结构
    desc XXX;
    

    3 数据库索引

    定义

    聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。就像字段,聚集索引是连续的,a后面肯定是b,非聚集索引就不连续了,就像图书馆的某个作者的书,有可能在第1个货架上和第10个货架上。还有一个小知识点就是:聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。

    举例

    • 图书馆的例子:一个图书馆那么多书,怎么管理呢?建立一个字母开头的目录,例如:a开头的书,在第一排,b开头的在第二排,这样在找什么书就好说了,这个就是一个聚集索引,可是很多人借书找某某作者的,不知道书名怎么办?图书管理员在写一个目录,某某作者的书分别在第几排,第几排,这就是一个非聚集索引

    • 字典的例子:字典前面的目录,可以按照拼音和部首去查询,我们想查询一个字,只需要根据拼音或者部首去查询,就可以快速的定位到这个汉字了,这个就是索引的好处,拼音查询法就是聚集索引,部首查询就是一个非聚集索引.

    作用
    索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需的数据。当进行数据检索时,系统先搜索索引,从中找到数据的指针,再直接通过指针从表中取数据!
    优点:查询快
    缺点:
    1)占用存储空间
    2)在表中执行insert、delete、update操作时,将有额外的操作来维护索引
    3)过多的索引起反作用
    注意:
    1)如果给表中某字段加了 主键约束 或是 唯一约束 ,这时会自动帮你 建立对应这个字段的 唯一索引
    2)索引不要轻易的建立
    使用

    CREATE [UNIQUE] [CLUSTER] INDEX <索引名> 
    ON <表名>(<列名>[<次序>][,<列名>[<次序>]]…);
    
    create unique index index_sid on Student (id des);
    -- 建立学生表索引:多个字段Id、Name索引倒序
    CREATE UNIQUE INDEX INDEX_SId_SName ON Student (Id DESC,Name DESC);
    
    --删除索引
    drop index index_sid;
    
    

    4 视图

    定义

    就是一张虚拟表,视图就是一个子查询!实际当中的数据依然存在实际的表里面,只不过取的时候是根据这个视图(也就是这个子查询)从实际当中的表里面取出来.
    优点:简化查询
    缺点:你建视图建多了,如果这表结构突然改了,那么你视图也要跟着改!增加了你维护的支出!所以建的view越多,维护起来越麻烦.

    除了简化查询以外,视图还有其他功能:
    比如你有一张表,里面有很多数据,这些数据有些是你想给别人看,但是有些是秘密不想给人看,那么你就可以建立视图,然后把视图的权限给他,这样就保护了自己的私有数据。

    CREATE VIEW <视图名> AS 
    SELECT 查询子句  [WITH CHECK OPTION]
    
    CREATE VIEW VIEW_Stu_ManAS SELECT * FROM Student WHERE Gender = '男' WITH CHECK OPTION;
    
    --删除视图
    DROP VIEW VIEW_Stu_Man;
    

    相关文章

      网友评论

          本文标题:常用常考sql语句总结

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