当前位置:首页 > 文章资讯 > 软件教程 > SQL常用语句总汇

SQL常用语句总汇

时间:2024-03-04 17:07:06 来源:ucbug下载站 作者:ucbug下载站
一、增:有4种方法
  1.使用insert插入单行数据:
                   语法:insert [into] <表名> [列名] values <列值>
     例:insert into Students (stuName,stuAge,stuBirthday) values ('伤心的小水沟',18,'1987/6/15')
     注意:into可以省略;列名列值用逗号分开;列值用单引号因上;如果省略表名,将依次插入所有列,年龄的数据类型为整型

  
2.使用insert select语句将现有表中的数据添加到已有的新表中
                   语法:insert into <已有的新表> <列名> select <原表列名> from <原表名>
     例:insert into TongXunLu (name,address,email)
                     select stuName,stuAddr,stuEmail
                     from Students

                   注意:into不可省略;查询得到的数据个数、顺序、数据类型等,必须与插入的项保持一致

  
3.使用select into语句将现有表中的数据添加到新建表中
                   语法:
select <列名> into <新建表名> from <源表名>
    
 例:select stuName,stuAddr,stuEmail into TongXunLu from Students
     
注意:新表是在执行查询语句的时候创建的,不能够预先存在
     
在新表中插入标识列(关键字‘identity’):
     语法:select identity (数据类型,标识种子,标识增长量) AS 列名
                      into 新表 from 原表名

     例:select  Students.stuName,Students.stuAddr,Students.stuEmail,indetity(int,1,1) as stuId into  TongXueLu from Students 

      注意:关键字‘identity’


  4.使用union关键字合并数据进行插入多行
     语法:insert into <新表名> <列名> select <列名> from <表名> union select <列名>from <表名> ...
     例:insert into TongXueLu (name,age,birthday)
                     select stuName,stuAge,stuEmail from Students union

                     select gName,gAge,gEmail from Grade

           或 insert into TongXueLu(name,sex,birthday) 

                         select stuName,stuAge,stuBirday from Students where StuSex = '男' union

                         select stuName,stuAge,stuBirday from Students where stuAge > 12

   注意:union 使用也要注意表结构必须相同,也有是这两个表的列必须相同的列,数据类型也必须相同。into可以省略

二、删:有2中方法
  1.使用delete删除数据某些数据
                  语法:delete from <表名> 

                          [where <删除条件>]

     例:delete from Students where stuName='伤心的小水沟'
  
                注意:删除整行不是删除单个字段,所以在delete后面不能出现字段名
  
2.使用truncate table 删除整个表的数据
                  语法:truncate table <表名>
     例:truncate table Students
     
注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能用于有外建约束引用的表

三、改
  
使用update更新修改数据
                 语法:update <表名> set <列名=更新值> 

                         [where <更新条件>]
     例:update Student set stuSex = '男/女' where 姓名='伤心的小水沟'
     注意:set后面可以紧随多个数据列的更新值;where子句是可选的,用来限制条件,如果不选则整个表的所有行都被更新

四、查

      1.普通查询

语法:select <列名> from <表名>

[where <查询条件表达试>]

[order by <排序的列名>]

[asc或desc]]
   1).查询所有数据行和列
    例:select * from Students
    
说明:查询Students表中所有行和列
   2).查询部分行列--条件查询
    例:select stuName,stuSex  from Students where stuAge = 5
    
说明:查询表Students中 stuAge = 5 的所有行,并显示 stuName,stuSex 两列
   3).在查询中使用 as 更改列名
    例:select stuName as '姓名' fromStudents where stuSex = '男'
    说明:查询Students表中性别为男的所有行,显示 stuName列,并将 stuName列 改名为 '姓名' 显示
   
4).查询空行
    例:select stuName fromStudents where stuEmail is null

    说明:查询表Students中 stuEmail 为空的所有行,并显示 stuName列;SQL语句中用 is null 或者 is not null 来判断是否为空行
   5).在查询中使用常量
    例:select stuName,'大大' as A from Students
    说明:查询表Students,显示stuName,并创建一个 新列A,给 A列 赋值'大大'
   6).查询返回限制行数(关键字:top  percent)
    例1:select top 6 stuName from Students
    说明:查询表Students,显示前6行 stuName列的值,top 为关键字

    例2:select top 60 percent stuName from Students
    说明:查询表Students,显示列 stuName的60%,percent 为关键字
   
7).查询排序(关键字:order by , asc , desc
    例:select stuName from Students 

            where stuAge >= 16 order by stuId desc
    说明:查询表中 stuAge 大于等于16的所有行,并按 stuId 降序显示 stuName 列;默认为 asc 升序

  2.模糊查询
   
1).使用like进行模糊查询
    注意:like运算副只用语字符串,所以仅与 char 和 varchar 数据类型联合使用
    
例:select * from Students where stuName like '张%'
    说明:查询显示表 Students 中,stuName 字段第一个字为张的记录

   2).使用 between 在某个范围内进行查询
    例:select * from Students where stuAge between 18 and 20
    
说明:查询显示表 Students 中 stuAge 在 18 到 20 之间的记录
   3).使用in 在列举值内进行查询
    例:select stuName from Students where stuAddr in ('西安','大雁塔','兵马俑')
    说明:查询表 Students 中 stuAddr 值为 '西安','大雁塔','兵马俑' 记录,显示 stuName 字段

  3.分组查询

       1).使用group by 进行分组查询
    例:select studentID as '学员编号', AVG(score) as '平均成绩'  
               from Exam group by stuId
    
说明:在表 Exam 中查询,按 stuId 字段分组,显示 stuId 字段和 score 字段的平均值;select语句中只允许被分组的列和为每个分组返               回的一个值的表达试,例如用一个列名作为参数的聚合函数
  
 2).使用having子句进行分组筛选
    例:select stuId as '学员编号',AVG(score) as '平均成绩' from Exam 
        group by stuId having count(score)>1

    说明:接上面例子,显示分组后 count(score)>1 的行,由于 where 只能在没有分组时使用,分组后只能使用 having 来限制条件,

  4.多表联接查询
   1).内联接
    
①在where子句中指定联接条件
    例:select a.name,b.sex from a,b where a.name=b.name
    说明:查询 表a 和 表b 中 name 字段相等的记录,并显示 表a 中的 name 字段和b 中的 sex 字段
    ②在from子句中使用join…on
     例:select a.name,b.sex from a

              inner join b on a.name = b.name
     
说明:同①

   2).外联接
    ①左外联接查询
     例:select s.name,e.courseId,e.score from Students as s
        left outer join Exam as e on s.scode=e.stuId

     说明:在 Students表 和 Exam表 中查询满足 on 条件的行,条件为Exam表 的 stuId 与 Students表 中的 sconde 相同
    ②右外联接查询
 
     例:select s.name,e.courseId,e.score from Students as s
        right outer join Exam as e on s.scode=e.stuId