精华内容
下载资源
问答
  • sql语句优化实例
    千次阅读
    2022-03-23 13:08:38

    一、前言

    在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的SQL就是整个系统性能的瓶颈。

    二、SQL优化一般步骤

    1、通过慢查日志等定位那些执行效率较低的SQL语句

    2、explain 分析SQL的执行计划

    需要重点关注type、rows、filtered、extra。

    type由上至下,效率越来越高。

    • ALL 全表扫描;
    • index 索引全扫描;
    • range 索引范围扫描,常用语<,<=,>=,between,in等操作;
    • ref 使用非唯一索引扫描或唯一索引前缀扫描,返回单条记录,常出现在关联查询中;
    • eq_ref 类似ref,区别在于使用的是唯一索引,使用主键的关联查询;
    • const/system 单条记录,系统会把匹配行中的其他列作为常数处理,如主键或唯一索引查询;
    • null MySQL不访问任何表或索引,直接返回结果;
    • 虽然上至下,效率越来越高,但是根据cost模型,假设有两个索引idx1(a, b, c),idx2(a, c),SQL为"select * from t where a = 1 and b in (1, 2) order by c";如果走idx1,那么是type为range,如果走idx2,那么type是ref;当需要扫描的行数,使用idx2大约是idx1的5倍以上时,会用idx1,否则会用idx2。

    Extra

    • **Using filesort:**MySQL需要额外的一次传递,以找出如何按排序顺序检索行。通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行;
    • **Using temporary:**使用了临时表保存中间结果,性能特别差,需要重点优化;
    • **Using index:**表示相应的 select 操作中使用了覆盖索引(Coveing Index),避免访问了表的数据行,效率不错!如果同时出现 using where,意味着无法直接通过索引查找来查询到符合条件的数据;
    • **Using index condition:**MySQL5.6之后新增的ICP,using index condtion就是使用了ICP(索引下推),在存储引擎层进行数据过滤,而不是在服务层过滤,利用索引现有的数据减少回表的数据。

    3、show profile 分析

    了解SQL执行的线程的状态及消耗的时间。

    默认是关闭的,开启语句“set profiling = 1;”

    SHOW PROFILES ;SHOW PROFILE FOR QUERY  #{id};
    

    4、trace

    trace分析优化器如何选择执行计划,通过trace文件能够进一步了解为什么优惠券选择A执行计划而不选择B执行计划。

    set optimizer_trace="enabled=on";set optimizer_trace_max_mem_size=1000000;select * from information_schema.optimizer_trace;
    

    5、确定问题并采用相应的措施

    • 优化索引;
    • 优化SQL语句:修改SQL、IN 查询分段、时间查询分段、基于上一次数据过滤;
    • 改用其他实现方式:ES、数仓等;
    • 数据碎片处理。

    三、场景分析

    1、最左匹配

    1)索引

    KEY `idx_shopid_orderno` (`shop_id`,`order_no`)
    

    2)SQL语句

    select * from _t where orderno=''
    

    查询匹配从左往右匹配,要使用order_no走索引,必须查询条件携带shop_id或者索引(shop_id,order_no)调换前后顺序。

    2、隐式转换

    1)索引

    KEY `idx_mobile` (`mobile`)
    

    2)SQL语句

    select * from _user where mobile=12345678901
    

    隐式转换相当于在索引上做运算,会让索引失效。mobile是字符类型,使用了数字,应该使用字符串匹配,否则MySQL会用到隐式替换,导致索引失效。

    3、大分页

    1)索引

    KEY `idx_a_b_c` (`a`, `b`, `c`)
    

    2)SQL语句

    select * from _t where a = 1 and b = 2 order by c desc limit 10000, 10;
    

    对于大分页的场景,可以优先让产品优化需求,如果没有优化的,有如下两种优化方式:

    • 一种是把上一次的最后一条数据,也即上面的c传过来,然后做“c < xxx”处理,但是这种一般需要改接口协议,并不一定可行;‘
    • 另一种是采用延迟关联的方式进行处理,减少SQL回表,但是要记得索引需要完全覆盖才有效果,SQL改动如下:
    select t1.* from _t t1, (select id from _t where a = 1 and b = 2 order by c desc limit 10000, 10) t2 where t1.id = t2.id;
    

    4、in + order by

    1)索引

    KEY `idx_shopid_status_created` (`shop_id`, `order_status`, `created_at`)
    

    2)SQL语句

    select * from _order where shop_id = 1 and order_status in (1, 2, 3) order by created_at desc limit 10
    

    in查询在MySQL底层是通过n*m的方式去搜索,类似union,但是效率比union高。

    in查询在进行cost代价计算时(代价 = 元组数 * IO平均值),是通过将in包含的数值,一条条去查询获取元组数的,因此这个计算过程会比较的慢,所以MySQL设置了个临界值(eq_range_index_dive_limit),5.6之后超过这个临界值后该列的cost就不参与计算了。因此会导致执行计划选择不准确。默认是200,即in条件超过了200个数据,会导致in的代价计算存在问题,可能会导致Mysql选择的索引不准确。

    3)处理方式

    可以(order_status, created_at)互换前后顺序,并且调整SQL为延迟关联。

    5、范围查询阻断,后续字段不能走索引

    1)索引

    KEY `idx_shopid_created_status` (`shop_id`, `created_at`, `order_status`)
    

    2)SQL语句

    select * from _order where shop_id = 1 and created_at > '2021-01-01 00:00:00' and order_status = 10
    

    范围查询还有“IN、between”。

    6、不等于、不包含不能用到索引的快速搜索

    可以用到ICP

    select * from _order where shop_id=1 and order_status not in (1,2)select * from _order where shop_id=1 and order_status != 1
    

    在索引上,避免使用NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等。

    7、优化器选择不使用索引的情况

    如果要求访问的数据量很小,则优化器还是会选择辅助索引,但是当访问的数据占整个表中数据的蛮大一部分时(一般是20%左右),优化器会选择通过聚集索引来查找数据。

    select * from _order where  order_status = 1
    

    查询出所有未支付的订单,一般这种订单是很少的,即使建了索引,也没法使用索引。

    8、复杂查询

    select sum(amt) from _t where a = 1 and b in (1, 2, 3) and c > '2020-01-01';select * from _t where a = 1 and b in (1, 2, 3) and c > '2020-01-01' limit 10;
    

    如果是统计某些数据,可能改用数仓进行解决;

    如果是业务上就有那么复杂的查询,可能就不建议继续走SQL了,而是采用其他的方式进行解决,比如使用ES等进行解决。

    9、asc和desc混用

    select * from _t where a=1 order by b desc, c asc
    

    desc 和asc混用时会导致索引失效。

    10、大数据

    对于推送业务的数据存储,可能数据量会很大,如果在方案的选择上,最终选择存储在MySQL上,并且做7天等有效期的保存。

    那么需要注意,频繁的清理数据,会照成数据碎片,需要联系DBA进行数据碎片处理。

    参考资料

    • 深入浅出MySQL:数据库开发、优化与管理维护(唐汉明 / 翟振兴 / 关宝军 / 王洪权)
    • MySQL技术内幕——InnoDB存储引擎(姜承尧)
    • https://dev.mysql.com/doc/refman/5.7/en/explain-output.html
    • https://dev.mysql.com/doc/refman/5.7/en/cost-model.html
    • https://www.yuque.com/docs/share/3463148b-05e9-40ce-a551-ce93a53a2c66
    • https://blog.csdn.net/agonie201218/article/details/107026646
    更多相关内容
  • SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL ...
  • SQL语句大全实例

    2019-04-09 13:32:12
    文档对主要sql语句进行了清晰的罗列,配以实例讲解,更加清晰易学
  • 主要介绍了 Mybatis基于注解形式的sql语句生成实例代码,需要的朋友可以参考下
  • 主要介绍了asp执行带参数的sql语句实例,参数化SQL语句可以有效的防止SQL注入漏洞,需要的朋友可以参考下
  • 主要介绍了C#中实现一次执行多条带GO的sql语句,以实例形式较为详细的分析了C#执行sql语句的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了PHP实现的构造sql语句类,结合实例形式分析了PHP针对常用SQL语句的动态构造与生成技巧,需要的朋友可以参考下
  • 主要介绍了常用SQL语句优化技巧,结合实例形式对比分析,总结了各种常用的SQL优化技巧及相关原理,需要的朋友可以参考下
  • 动态组合SQL语句方式实现批量更新的实例,需要的朋友可以参考一下
  • SQL的经典语句实例整理资料 ,sql非常经典的语句,看了这些语句,不用再担心sql不会写了。
  • 常用SQL语句vb6.0实例,适用初学者
  • mysql sql语句性能调优简单实例 在做服务器开发时,有时候对并发量有一定的要求,有时候影响速度的是某个sql语句,比如某个存储过程。现在假设服务器代码执行过程中,某个sql执行比较缓慢,那如何进行优化呢? 假如...
  • truncat student //该语句是删除该张表,重新创建表, 不是一条一条删除表中数据;且truncat只能作用于表,delete,drop可作用于表,视图 5.常用关键字总结 5.1 distinct 5.1.1 作用于单列 select distinct 列名 //...

    1.创建3张表

    //学生表创建
    CREATE table student(
    Sno CHAR(9) PRIMARY KEY,
    Sname CHAR(20) UNIQUE,
    Ssex char(2),
    Sage SMALLINT,
    Sdept char(20)
    );
    
    //课程表创建
    CREATE table course(
    Cno char(4) PRIMARY KEY,
    Cname char(40) not NULL,
    Cpno char(4),
    Ccredit SMALLINT
    );
    
    //学生选课表创建
    CREATE table SC(
    Sno char(9),
    Cno char(4),
    Grade SMALLINT
    );
    

    2.向表格添加数据

    //向学生表中添加数据
    INSERT into Student values(
    201215121,'李勇','男',20,'CS'),
    (201215122,'刘晨','女',19,'CS'),
    (201215123,'王敏','女',18,'MA'),
    (201215125,'张立','男',19,'IS'
    );
    
    //向课程表中添加数据
    insert into course VALUES(
    '1','数据库','5',4),
    '2','数学','',2),
    '3','信息系统','1',4),
    ('4','操作系统','6',3),
    ('5','数据结构','7',4),
    ('6','数据处理','',2),
    ('7','Java语言','6',4)
    
    //向学生选课表中添加数据
    insert into sc values
    (201215121,1,92),
    (201215121,2,85),
    (201215121,3,88),
    (201215122,2,58),
    (201215122,3,80)
    
    

    3.数据查询

    3.1单表查询

    3.1.1查询全体学生的学号与姓名

    select Sno,Sname from student


    3.1.2查询全体学生的姓名,学号,所在系

    select Sname,Sno,Sdept from student
    


    3.1.3查询全体学生的详细记录

    select * from student
    


    3.1.4查询全体学生的姓名及其出生年份

    select Sname,2020-Sage from Student


    3.1.5查询全体学生的姓名,出生年份和所在的院系,要求用小写字母表示系名

    select Sname,2020-Sage,lower(Sdept) from student


    3.1.6查询选修了课程的学生学号

    select Sno from SC


    3.1.7查询计算机科学系全体学生的名单

    select Sname from student where Sdept='CS'


    3.1.8查询所有年龄在20岁以下的学生姓名及其年龄

    select Sname,Sage from student where Sage<20


    3.1.9查询考试成绩不及格的学生的学号

    select Sno from sc where Grade<60


    3.1.10查询年龄在20-23岁(包括20和23)之间的学生的姓名,系别,年龄

    select Sname,Sdept,Sage from student where Sage between 20 and 23
    


    3.1.11查询年龄不中20-23之间的学生姓名,系别,年龄

    select Sname,Sdept,Sage from student where Sage not between 20 and 23


    3.1.12查询计算机科学系(CS),数学系(MA),信息系(IS)学生的姓名和性别

    select Sname,Ssex from student where Sdept in('CS','MA','IS')


    3.1.13查询既不是CS,MA,也不是IS的学生的姓名和性别

    select Sname,Ssex from student where Sdept not in('CS','MA','IS')


    3.1.14查询学号为201215121的学生的详细情况

    select * from student where Sno='201215121'


    3.1.15查询所有姓刘的学生的姓名,学号,性别

    select Sname,Sno,Ssex from student where Sname like '刘%'


    3.1.16查询姓欧阳且全名为3个汉字的学生的姓名

    select Sname from student where Sname like '欧阳_'


    3.1.17查询名字中第二个字为“阳”的学生的姓名和性别

    select Sname,Ssex from student where Sname like '_阳%'


    3.1.18查询所有不姓刘的学生的姓名,学号和性别

    select Sname,Sno,Ssex from student where Sname not like '刘%'


    3.1.19查询缺少成绩的学生的学号和响应的课程号

    select Sno,Cno from sc where grade is null


    3.1.20查询所有有成绩的学生的学号和课程号

    select Sno,Cno from sc where grade is not null


    3.1.21查询计算机科学系且年龄在20岁以下的学生的姓名

    select Sname from student where Sdept='CS' and Sage<=20


    3.1.22查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列

    //order by 默认升序,ASC是升序,DESC是降序
    select Sno,Grade from sc where Cno='3' order by Grade desc


    3.1.23查询全体学生情况,查询结果按所在系的系号升序排列,同一系的学生按年龄降序排列

    select * from student order by Sdept,Sage DESC


    3.1.24查询学生总人数

    select count(*) from student


    3.1.25查询选修了课程的学生人数

    //学生可以选多门课程,避免重复需在count函数里加distinct短语
    select count(distinct Sno) from sc


    3.1.26计算选修1号课程的学生平均成绩

    select avg(Grade) from sc where Cno='1'


    3.1.27查询选修1号课程的学生最高分数

    select max(Grade) from sc where Cno='1'


    3.1.28查询学生201215121选修课程的总学分数

    select sum(Grade) from sc where Sno='201215121'


    3.1.29求各个课程号及相应的选课人数

    //group up 是将查询结果按某个属性进行分组
    select Cno ,Count(Sno)
    from sc
    group by Cno


    3.1.30查询选修了3门以上课程的学生学号

    //having作用于组,这里先用group by按Sno进行分组,
    再用聚集函数count对每一组进行计数,用having提取出满足条件的组
    select Sno
    from sc
    group by Sno
    having count(*)>3


    3.1.31查询平均成绩大于等于90分的学生学号和平均成绩

    //where句中不能用聚集函数作为条件表达式
    select Sno,avg(Grade)
    from sc
    group by Sno
    having  avg(Grade)>=90


    3.2连接查询
    3.2.1查询每个学生及其选修课的情况

    select student.*,sc.*
    from Student,sc
    where student.Sno=sc.Sno


    3.2.2将上面 的例子用自然连接完成

    select student.Sno,Sname,Ssex,Sage,Sdept,Cno,grade
    from student,sc
    where student.sno=sc.sno


    3.2.3查询选修2号课程且成绩在90分以上的所有学生的学号和姓名

    select student.Sno,Sname
    from Student,sc
    where student.Sno=sc.Sno and 
          sc.Cno='2'   and 
          sc.Grade>=90


    3.2.4查询每一门课的间接先修课(先修课的先修课)

    //先对一门课找到其先修课,再按此先修课的课程号查找它的先修课,
    //将表与自身连接,就要取别名
    select FIRST.Cno,second.Cpno
    from Course first,Course SECOND
    where `first`.Cpno=`SECOND`.Cno
    


    3.2.5查询每个学生的学号,姓名,选修的课程名及成绩

    select student.Sno,Sname,Cname,Grade
    from student,sc,course
    where student.Sno=sc.Sno AND
          sc.Cno=course.Cno


    3.3嵌套查询
    3.3.1查询与刘晨在同一个系学习的学生

    select Sno,Sname,Sdept
    from student
    where Sdept in(
        select Sdept
        from student
        where Sname='刘晨'
    )


    3.3.2查询选修了课程名为“信息系统”的学生学号和姓名

    //嵌套查询太多了,用连接查询呈现出来
    select student.Sno,Sname
    from student,sc,course
    where student.Sno=sc.Sno  and 
          sc.Cno=course.Cno and
          course.Cname='信息系统'


    3.3.3找出每个学生超过他自己选修课程平均成绩的课程号

    select Sno,Cno
    from sc x
    where Grade >=(
        select avg(Grade)
        from sc y
        where y.Sno=x.Sno
    )


    3.3.4查询非计算机系中比计算机系任意学生年龄小的学生姓名和年龄

    //任意:any   所有:all
    select Sname,Sage
    from student
    where Sage<any(
       select Sage
       from student
       where Sdept='CS'
    )


    3.3.5查询非计算机系中比计算机系所有学生年龄都小的学生姓名和年龄

    select Sname,Sage
    from student
    where Sage<all(
       select Sage
       from student
       where Sdept='CS'
    )


    3.3.6查询所有选修了1号课程的学生姓名

    select Sname
    from student,sc
    where student.Sno=sc.Sno and 
          sc.Cno='1'


    3.3.7查询选修了全部课程的学生姓名

    select Sname
    from student
    where not exists(
      select * 
      from course
      where not exists(
         SELECT *
         from sc
         where Sno=student.Sno AND 
         Cno=course.Cno
      )    
    )


    3.4集合查询
    3.4.1查询选修了1号课程或则2号课程的学生

    select Sno
    from sc
    where Cno='1'
    UNION
    select Sno
    from sc
    where Cno='2'
    


    3.4.2查询既选修了课程1又选修了课程2的学生

    select Sno
    from sc
    where Cno='1'
    intersert
    select Sno
    from sc
    where Cno='2'
    


    4.数据更新
    4.1插入数据
    4.1.1将一个新学生元组(学号:201215128,姓名:陈东,性别:男,系别:IS,年龄:18岁)

    insert into student values ('201215128','陈东','男',18,'IS')


    4.1.2插入一条选课记录

    insert into sc(Sno,Cno) VALUES('201215128','1')
    


    4.1.3对每一个系,求学生的平均年龄,并把结果存入数据库

    //首先创建一张表来存放数据
    create table Deptage(
      Sdept char(15),
      avg_age smallint
    )
    //计算数据,存放到表中
    insert into Deptage(Sdept,avg_age)
    select Sdept,avg(Sage)
    from student
    group by Sdept 
    


    4.2修改数据
    4.2.1将学生201215121的年龄改为22岁

    update student set Sage=22 where Sno='201215121'


    4.2.2将所有学生的年龄增加1岁

    update student set Sage=Sage+1


    4.2.3将计算机系全体学生的成绩置0

    update student set Sage=0 where Sdept='CS'


    4.3删除数据
    4.3.1删除学号为201215128的学生记录

    delete from student where Sno='201215128'


    4.3.2删除计算机系所有学生的选课记录

    delete 
    from sc
    where Sno in(
      select Sno
      from student
      where Sdept='CS'
    )


    4.3.3删除学生表所有记录

    truncat student    //该语句是删除该张表,重新创建表,
    不是一条一条删除表中数据;且truncat只能作用于表,delete,drop可作用于表,视图


    5.常用关键字总结
    5.1 distinct
    5.1.1 作用于单列

    select distinct 列名  //去重


    5.1.2 作用多列

    select distinct 列名1,列名2,列名3    //对3列都去重


    5.1.3 与函数一起使用

    select count(distinct 列名)   //计算不重复的列名个数
    
    展开全文
  • SQLServer实例语句

    2020-06-11 15:09:00
    SQLServer实例语句,偏基础吧,合适小白拿来练习用,就是一些实例语句哈,需要的可以下载下来练习下,初级面试题
  • sql语句大全+实例讲解

    万次阅读 多人点赞 2020-05-20 19:09:03
    1.创建3张表 //学生表创建 CREATE table student( Sno CHAR(9) PRIMARY KEY, ...truncat student //该语句是删除该张表,重新创建表,不是一条一条删除表中数据;且truncat只能作用于表,delete,drop可作用于表,视图

    1.创建3张表

    //学生表创建
    CREATE table student(
    Sno CHAR(9) PRIMARY KEY,
    Sname CHAR(20) UNIQUE,
    Ssex char(2),
    Sage SMALLINT,
    Sdept char(20)
    );
    
    //课程表创建
    CREATE table course(
    Cno char(4) PRIMARY KEY,
    Cname char(40) not NULL,
    Cpno char(4),
    Ccredit SMALLINT
    );
    
    //学生选课表创建
    CREATE table SC(
    Sno char(9),
    Cno char(4),
    Grade SMALLINT
    );
    

    2.向表中添加数据
    也可使用图形化工具Navicat或其他进行输入,

    //向学生表中添加数据
    INSERT into Student values(
    201215121,'李勇','男',20,'CS'),
    (201215122,'刘晨','女',19,'CS'),
    (201215123,'王敏','女',18,'MA'),
    (201215125,'张立','男',19,'IS'
    );
    
    //向课程表中添加数据
    insert into course VALUES(
    '1','数据库','5',4),
    '2','数学','',2),
    '3','信息系统','1',4),
    ('4','操作系统','6',3),
    ('5','数据结构','7',4),
    ('6','数据处理','',2),
    ('7','Java语言','6',4)
    
    //向学生选课表中添加数据
    insert into sc values
    (201215121,1,92),
    (201215121,2,85),
    (201215121,3,88),
    (201215122,2,58),
    (201215122,3,80)
    
    

    3.数据查询

    3.1单表查询

    3.1.1查询全体学生的学号与姓名
    select Sno,Sname 
    from student
    
    3.1.2查询全体学生的姓名,学号,所在系
    select Sname,Sno,Sdept
    from student
    
    3.1.3查询全体学生的详细记录
    select * from student
    
    3.1.4查询全体学生的姓名及其出生年份
    select Sname,2020-Sage
    from Student
    
    3.1.5查询全体学生的姓名,出生年份和所在的院系,要求用小写字母表示系名
    select Sname,2020-Sage,lower(Sdept)
    from student
    
    3.1.6查询选修了课程的学生学号
    select Sno
    from SC
    
    3.1.7查询计算机科学系全体学生的名单
    select Sname
    from student
    where Sdept='CS'
    
    3.1.8查询所有年龄在20岁以下的学生姓名及其年龄
    select Sname,Sage
    from student
    where Sage<20
    
    3.1.9查询考试成绩不及格的学生的学号
    select Sno
    from sc
    where Grade<60
    
    3.1.10查询年龄在20-23岁(包括20和23)之间的学生的姓名,系别,年龄
    select Sname,Sdept,Sage
    from student
    where Sage between 20 and 23
    
    3.1.11查询年龄不中20-23之间的学生姓名,系别,年龄
    select Sname,Sdept,Sage
    from student
    where Sage not between 20 and 23
    
    3.1.12查询计算机科学系(CS),数学系(MA),信息系(IS)学生的姓名和性别
    select Sname,Ssex
    from student
    where Sdept in('CS','MA','IS')
    
    3.1.13查询既不是CS,MA,也不是IS的学生的姓名和性别
    select Sname,Ssex
    from student
    where Sdept not in('CS','MA','IS')
    
    3.1.14查询学号为201215121的学生的详细情况
    select * 
    from student
    where Sno='201215121'
    
    3.1.15查询所有姓刘的学生的姓名,学号,性别
    select Sname,Sno,Ssex
    from student
    where Sname like '刘%'
    
    3.1.16查询姓欧阳且全名为3个汉字的学生的姓名
    select Sname
    from student
    where Sname like '欧阳_'
    
    3.1.17查询名字中第二个字为“阳”的学生的姓名和性别
    select Sname,Ssex
    from student
    where Sname like '_阳%'
    
    3.1.18查询所有不姓刘的学生的姓名,学号和性别
    select Sname,Sno,Ssex
    from student
    where Sname not like '刘%'
    
    3.1.19查询缺少成绩的学生的学号和响应的课程号
    select Sno,Cno
    from sc
    where grade is null
    
    3.1.20查询所有有成绩的学生的学号和课程号
    select Sno,Cno
    from sc
    where grade is not null
    
    3.1.21查询计算机科学系且年龄在20岁以下的学生的姓名
    select Sname
    from student
    where Sdept='CS' and Sage<=20
    
    3.1.22查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
    //order by 默认升序,ASC是升序,DESC是降序
    select Sno,Grade
    from sc
    where Cno='3'
    order by Grade desc
    
    3.1.23查询全体学生情况,查询结果按所在系的系号升序排列,同一系的学生按年龄降序排列
    select *
    from student
    order by Sdept,Sage DESC
    
    3.1.24查询学生总人数
    select count(*)
    from student
    
    3.1.25查询选修了课程的学生人数
    //学生可以选多门课程,避免重复需在count函数里加distinct短语
    select count(distinct Sno)
    from sc
    
    3.1.26计算选修1号课程的学生平均成绩
    select avg(Grade)
    from sc
    where Cno='1'
    
    3.1.27查询选修1号课程的学生最高分数
    select max(Grade)
    from sc
    where Cno='1'
    
    3.1.28查询学生201215121选修课程的总学分数
    select sum(Grade)
    from sc
    where Sno='201215121'
    
    3.1.29求各个课程号及相应的选课人数
    //group up 是将查询结果按某个属性进行分组
    select Cno ,Count(Sno)
    from sc
    group by Cno
    
    3.1.30查询选修了3门以上课程的学生学号
    //having作用于组,这里先用group by按Sno进行分组,再用聚集函数count对每一组进行计数,用having提取出满足条件的组
    select Sno
    from sc
    group by Sno
    having count(*)>3
    
    3.1.31查询平均成绩大于等于90分的学生学号和平均成绩
    //where句中不能用聚集函数作为条件表达式
    select Sno,avg(Grade)
    from sc
    group by Sno
    having  avg(Grade)>=90
    

    3.2连接查询

    3.2.1查询每个学生及其选修课的情况
    select student.*,sc.*
    from Student,sc
    where student.Sno=sc.Sno
    
    3.2.2将上面 的例子用自然连接完成
    select student.Sno,Sname,Ssex,Sage,Sdept,Cno,grade
    from student,sc
    where student.sno=sc.sno
    
    3.2.3查询选修2号课程且成绩在90分以上的所有学生的学号和姓名
    select student.Sno,Sname
    from Student,sc
    where student.Sno=sc.Sno and 
          sc.Cno='2'   and 
          sc.Grade>=90
    
    3.2.4查询每一门课的间接先修课(先修课的先修课)
    //先对一门课找到其先修课,再按此先修课的课程号查找它的先修课,
    //将表与自身连接,就要取别名
    select FIRST.Cno,second.Cpno
    from Course first,Course SECOND
    where `first`.Cpno=`SECOND`.Cno
    
    3.2.5查询每个学生的学号,姓名,选修的课程名及成绩
    select student.Sno,Sname,Cname,Grade
    from student,sc,course
    where student.Sno=sc.Sno AND
          sc.Cno=course.Cno
    

    3.3嵌套查询

    3.3.1查询与刘晨在同一个系学习的学生
    select Sno,Sname,Sdept
    from student
    where Sdept in(
        select Sdept
        from student
        where Sname='刘晨'
    )
    
    3.3.2查询选修了课程名为“信息系统”的学生学号和姓名
    //嵌套查询太多了,用连接查询呈现出来
    select student.Sno,Sname
    from student,sc,course
    where student.Sno=sc.Sno  and 
          sc.Cno=course.Cno and
          course.Cname='信息系统'
    
    3.3.3找出每个学生超过他自己选修课程平均成绩的课程号
    select Sno,Cno
    from sc x
    where Grade >=(
        select avg(Grade)
        from sc y
        where y.Sno=x.Sno
    )
    
    3.3.4查询非计算机系中比计算机系任意学生年龄小的学生姓名和年龄
    //任意:any   所有:all
    select Sname,Sage
    from student
    where Sage<any(
       select Sage
       from student
       where Sdept='CS'
    )
    
    3.3.5查询非计算机系中比计算机系所有学生年龄都小的学生姓名和年龄
    select Sname,Sage
    from student
    where Sage<all(
       select Sage
       from student
       where Sdept='CS'
    )
    
    3.3.6查询所有选修了1号课程的学生姓名
    select Sname
    from student,sc
    where student.Sno=sc.Sno and 
          sc.Cno='1'
    
    3.3.7查询选修了全部课程的学生姓名
    select Sname
    from student
    where not exists(
      select * 
      from course
      where not exists(
         SELECT *
         from sc
         where Sno=student.Sno AND 
         Cno=course.Cno
      )    
    )
    

    3.4集合查询

    3.4.1查询选修了1号课程或则2号课程的学生
    select Sno
    from sc
    where Cno='1'
    UNION
    select Sno
    from sc
    where Cno='2'
    
    3.4.2查询既选修了课程1又选修了课程2的学生
    select Sno
    from sc
    where Cno='1'
    intersert
    select Sno
    from sc
    where Cno='2'
    

    4.数据更新

    4.1插入数据

    4.1.1将一个新学生元组(学号:201215128,姓名:陈东,性别:男,系别:IS,年龄:18岁)
    insert into student
    values ('201215128','陈东','男',18,'IS')
    
    4.1.2插入一条选课记录
    insert into sc(Sno,Cno) VALUES('201215128','1')
    
    4.1.3对每一个系,求学生的平均年龄,并把结果存入数据库
    //首先创建一张表来存放数据
    create table Deptage(
      Sdept char(15),
      avg_age smallint
    )
    
    //计算数据,存放到表中
    insert into Deptage(Sdept,avg_age)
    select Sdept,avg(Sage)
    from student
    group by Sdept 
    

    4.2修改数据

    4.2.1将学生201215121的年龄改为22岁
    update student
    set Sage=22
    where Sno='201215121'
    
    4.2.2将所有学生的年龄增加1岁
    update student
    set Sage=Sage+1
    
    4.2.3将计算机系全体学生的成绩置0
    update student
    set Sage=0
    where Sdept='CS'
    

    4.3删除数据

    4.3.1删除学号为201215128的学生记录
    delete 
    from student
    where Sno='201215128'
    
    4.3.2删除计算机系所有学生的选课记录
    delete 
    from sc
    where Sno in(
      select Sno
      from student
      where Sdept='CS'
    )
    
    4.3.3删除学生表所有记录
    truncat student    //该语句是删除该张表,重新创建表,不是一条一条删除表中数据;且truncat只能作用于表,delete,drop可作用于表,视图
    

    5.常用关键字总结

    5.1 distinct
    5.1.1 作用于单列
    select distinct 列名  //去重
    
    5.1.2 作用多列
    select distinct 列名1,列名2,列名3    //对3列都去重
    
    5.1.3 与函数一起使用
    select count(distinct 列名)   //计算不重复的列名个数
    
    展开全文
  • 介绍了sql语句like多个条件的写法实例,有需要的朋友可以参考一下
  • 50个常用sql语句实例

    2013-11-10 17:05:48
    50个常用sql语句实例
  •  Sp_configure 可以用于管理和优化SQLServer资源,而且绝大部分配置都可以使用SQLServer ManagementStudio的图形化界面实现。  准备工作:  为了查看SQLServer当前实例的配置,也可以使用下列查询来实现: ...
  •  SQL分类:  DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)  DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)  DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)  首先,简要介绍基础语句:  1、...

    下列语句部分是Mssql语句,不可以在access中使用。
      SQL分类:
      DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
      DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
      DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
      首先,简要介绍基础语句:
      1、说明:创建数据库
    CREATE DATABASE database-name
      2、说明:删除数据库
    drop database dbname
      3、说明:备份sql server
      — 创建 备份数据的 device
    USE master
    EXEC sp_addumpdevice ’disk’, ’testBack’, ’c:\mssql7backup\MyNwind_1.dat’
      — 开始 备份
    BACKUP DATABASE pubs TO testBack
      4、说明:创建新表
    create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],…)
      根据已有的表创建新表:
    A:create table tab_new like tab_old (使用旧表创建新表)
    B:create table tab_new as select col1,col2… from tab_old definition only
      5、说明:
      删除新表:drop table tabname
      6、说明:
      增加一个列:Alter table tabname add column col type
      注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
      7、说明:
      添加主键:Alter table tabname add primary key(col)
      说明:
      删除主键:Alter table tabname drop primary key(col)
      8、说明:
      创建索引:create [unique] index idxname on tabname(col….)
      删除索引:drop index idxname
      注:索引是不可更改的,想更改必须删除重新建。
      9、说明:
      创建视图:create view viewname as select statement
      删除视图:drop view viewname
    10、说明:几个简单的基本的sql语句
      选择:select * from table1 where 范围
      插入:insert into table1(field1,field2) values(value1,value2)
      删除:delete from table1 where 范围
      更新:update table1 set field1=value1 where 范围
      查找:select * from table1 where field1 like ’%value1%’ —like的语法很精妙,查资料!
      排序:select * from table1 order by field1,field2 [desc]
      总数:select count * as totalcount from table1
      求和:select sum(field1) as sumvalue from table1
      平均:select avg(field1) as avgvalue from table1
      最大:select max(field1) as maxvalue from table1
      最小:select min(field1) as minvalue from table1
      11、说明:几个高级查询运算词
      A: UNION 运算符
      UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
      B: EXCEPT 运算符
      EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
      C: INTERSECT 运算符
      INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
      注:使用运算词的几个查询结果行必须是一致的。
      12、说明:使用外连接
      A、left outer join:
      左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
    SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
      B:right outer join:
      右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
      C:full outer join:
      全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
      其次,大家来看一些不错的sql语句
      1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
      法一:select * into b from a where 1<>1
      法二:select top 0 * into b from a
      2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
    insert into b(a, b, c) select d,e,f from b;
      3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
    insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
      例子:…from b in ’"&Server.MapPath(".")&"\data.mdb" &"’ where…
      4、说明:子查询(表名1:a 表名2:b)
    select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
      5、说明:显示文章、提交人和最后回复时间
    select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
    6、说明:外连接查询(表名1:a 表名2:b)
    select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
      7、说明:在线视图查询(表名1:a )
    select * from (SELECT a,b,c FROM a) T where t.a > 1;
      8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
    select * from table1 where time between time1 and time2
    select a,b,c, from table1 where a not between 数值1 and 数值2
      9、说明:in 的使用方法
    select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
      10、说明:两张关联表,删除主表中已经在副表中没有的信息
    delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
      11、说明:四表联查问题:
    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where …
      12、说明:日程安排提前五分钟提醒
    SQL: select * from 日程安排 where datediff(’minute’,f开始时间,getdate())>5
      13、说明:一条sql 语句搞定数据库分页
    select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
      14、说明:前10条记录
    select top 10 * form table1 where 范围
      15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
    select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
      16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
    (select a from tableA ) except (select a from tableB) except (select a from tableC)
      17、说明:随机取出10条数据
    select top 10 * from tablename order by newid()
      18、说明:随机选择记录
    select newid()
      19、说明:删除重复记录
    Delete from tablename where id not in (select max(id) from tablename group by col1,col2,…)
      20、说明:列出数据库里所有的表名
    select name from sysobjects where type=’U’
    21、说明:列出表里的所有的
    select name from syscolumns where id=object_id(’TableName’)
      22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
    select type,sum(case vender when ’A’ then pcs else 0 end),sum(case vender when ’C’ then pcs else 0 end),sum(case vender when ’B’ then pcs else 0 end) FROM tablename group by type
      显示结果:
    type vender pcs
    电脑 A 1
    电脑 A 1
    光盘 B 2
    光盘 A 2
    手机 B 3
    手机 C 3

    23、说明:初始化表table1
    TRUNCATE TABLE table1
      24、说明:选择从10到15的记录
    select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
    随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
      对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:
    Randomize
    RNumber = Int(Rnd499) +1
     
    While Not objRec.EOF
    If objRec(“ID”) = RNumber THEN
    … 这里是执行脚本 …
    end if
    objRec.MoveNext
    Wend
      这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了?
      采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:
    Randomize
    RNumber = Int(Rnd499) + 1
     
    SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
     
    set objRec = ObjConn.Execute(SQL)
    Response.WriteRNumber & " = " & objRec(“ID”) & " " & objRec(“c_email”)
      不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
    再谈随机数
      现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。
      为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:
      SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
      假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码):
    SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & “+ 9”
      注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。
      随机读取若干条记录,测试过
    Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
    Sql server:select top n * from 表名 order by newid()
    mysql select * From 表名 Order By rand() Limit n
      Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)
      语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where …
      使用SQL语句 用…代替过长的字符串显示
      语法:
      SQL数据库:select case when len(field)>10 then left(field,10)+’…’ else field end as news_name,news_id from tablename
      Access数据库:SELECT iif(len(field)>2,left(field,2)+’…’,field) FROM tablename;
      Conn.Execute说明
      Execute方法
      该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:
      1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
      Set 对象变量名=连接对象.Execute(“SQL 查询语言”)
      Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。
      2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
      连接对象.Execute “SQL 操作性语句” [, RecordAffected][, Option]
      ·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
      ·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。
      ·BeginTrans、RollbackTrans、CommitTrans方法
      这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。
      事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。
      BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
    SQL语句大全精要
    2006/10/26 13:46
    DELETE语句
    DELETE语句:用于创建一个删除查询,可从列在 FROM 子句之中的一个或多个表中删除记录,且该子句满足 WHERE 子句中的条件,可以使用DELETE删除多个记录。
    语法:DELETE [table.*] FROM table WHERE criteria
    语法:DELETE * FROM table WHERE criteria=’查询的字’
    说明:table参数用于指定从其中删除记录的表的名称。
    criteria参数为一个表达式,用于指定哪些记录应该被删除的表达式。
    可以使用 Execute 方法与一个 DROP 语句从数据库中放弃整个表。不过,若用这种方法删除表,将会失去表的结构。不同的是当使用 DELETE,只有数据会被删除;表的结构以及表的所有属性仍然保留,例如字段属性及索引。
    UPDATE
    有关UPDATE,急!!!!!!!!!!!
    在ORACLE数据库中
    表 A ( ID ,FIRSTNAME,LASTNAME )
    表 B( ID,LASTNAME)
    表 A 中原来ID,FIRSTNAME两个字段的数据是完整的
    表 B中原来ID,LASTNAME两个字段的数据是完整的
    现在要把表 B中的LASTNAME字段的相应的数据填入到A表中LASTNAME相应的位置。两个表中的ID字段是相互关联的。
    先谢谢了!!!
    update a set a.lastname=(select b.lastname from b where a.id=b.id)
      掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete。
      练掌握SQL是数据库用户的宝贵财富。在本文中,我们将引导你掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。
      在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。
      SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。

    The Execute method executes a specified query, SQL statement, stored procedure, or provider-specific text.
    Execute的作用是:执行一个查询语句、陈述语句、程序或技术提供对象[provider]的详细文本。

    The results are stored in a new Recordset object if it is a row-returning query. A closed Recordset object will be returned if it is not a row-returning query.
    如果返回行[row-returning]查询语句,那么结果将被存储在一个新的记录对象中;如果它不是一个返回行[row-returning]查询语句,那么它将返回一个关闭的记录对象。

    Note: The returned Recordset is always a read-only, forward-only Recordset!
    注意:返回的Recordset是一个只读的、只向前兼容的Recordset。

    Tip: To create a Recordset with more functionality, first create a Recordset object. Set the desired properties, and then use the Recordset object’s Open method to execute the query.
    提示:在第一次创建Recordset对象时,需要将它创建为一个更具功能性的Recordset对象。设置一个我们所希望的属性,使用Recordset对象的Open方法去执行查询语句。
    Syntax for row-returning
    row-returning[返回行]语法
    |Set objrs=objconn.Execute(commandtext,ra,options)|
    Syntax for non-row-returning
    non-row-returning[非返回行]语法
    |–Syntax for non-row-returning
    non-row-returning[非返回行]语法|
    |objconn.Execute commandtext,ra,options|
    | Parameter参数 | Description描述 |
    |-commandtext

    -|-Required. The SQL statement, stored procedure, or provider-specific text to execute
    必要参数。指定需要执行的SQL语句,现存的程序或技术提供对象[provider]的详细文本-|
    | ra | Optional. Sets how the provider should evaluate the commandtext parameter. Can be one or more CommandTypeEnum or ExecuteOptionEnum values. Default is adCmdUnspecified
    可选参数。设置技术提供对象[provider]应该如何评估CommandText属性的功能。它可以是一个或多个CommandTypeEnum 或 ExecuteOptionEnum的值。默认值是adCmdUnspecified |
    Example
    案例
    | <%

    sql=“SELECT companyname FROM Customers”

    Set rs=conn.Execute(sql)

    %> |
    转自

    展开全文
  • SqlSugar-执行Sql语句查询实例

    千次阅读 2019-12-27 21:02:56
    使用SqlSugar执行sql语句 1.简单查询 SqlSugarClient db = SugarContext.GetInstance(); //执行sql语句,处理 //1.执行sql,转成list List<teacher> list1 = db.SqlQuery<teacher>("select * from ...
  • SQL语句经典实例

    2011-10-05 14:36:17
    介绍sql语句的一些常用用法,方便巩固sql知识
  • SERVER SQL实例应用以及sql语法总结,有需要留存!
  • 主要介绍了MySql批量插入优化Sql执行效率实例详解的相关资料,需要的朋友可以参考下
  • sql if语句实例

    千次阅读 2019-04-01 14:56:07
    if函数 语法: if(boolean testCondition, value1, value2) 返回值: 当判断条件testCondition为TRUE时,返回value1;否则返回value2 示例: 原始数据 转化: SELECT app_list,if(account_id>...
  • SQL语句基础,常用的SQL语句构造方法
  • ORACLE性能优化SQL语句优化

    千次阅读 2018-08-18 20:12:05
    1. SQL语句执行过程 2. 优化器及执行计划 3. 合理应用Hints 4. 索引及应用实例 5. 其他优化技术及应用   1.SQL语句执行过程 1.1 SQL语句的执行步骤    1)语法分析,分析语句的语法是否符合规范,...
  • 介绍了sql条件查询语句的简单实例,有需要的朋友可以参考一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 371,547
精华内容 148,618
关键字:

sql语句优化实例