首页 > 代码库 > SQL语句

SQL语句

           插入数据
单行插入:
INSERT  [INTO]  <表名>  [列名]  VALUES  <值列表>
例:INSERT INTO Authors (AuthorName,Sex,Age,Email,TelPhone,City)
     VALUES (‘吴玉鹏‘,1,47,‘wyp@sohu.com‘,‘01090876529‘,‘北京‘)
 
多行插入:
(1) INSERT INTO  <表2>    [列名]    SELECT  <列名>  FROM  <表1>
         <表2>必须事先存在
      例:INSERT INTO AuthorsInfo (作者姓名,年龄,电子邮件,所在城市)
             SELECT AuthorName,Age,Email,City
                FROM Authors
(2)SELECT  <列名> 
     INTO  <新表>
     FROM  <原始表>
       <新表>不能事先存在,它是在执行该语句时系统自动创建的。
     例:SELECT AuthorName,Age,Email,City
         INTO  NewAuthorsName
         FROM  Authors
(3)Union关键字插入多行数据
     INSERT  [INTO]  <表名>  [列名]
     SELECT  <值列表> UNION
     SELECT  <值列表> UNION
     SELECT  <值列表>
     例:INSERT INTO Authors (AuthorName, Sex, Age, Email, TelPhone)
     SELECT ‘张笑林‘,1,30,‘zxl@163.com‘,‘02067839876‘ UNION
     SELECT ‘李辉‘,0,52,‘lh@126.com‘,‘02167345987‘ UNION
     SELECT ‘洪海波‘,1,40,‘hhb@163.com‘,‘031189654329‘
 
插入标识列数据:
SELECT  IDENTITY(数据类型, 标识种子, 标识增量)  as 列名 
INTO  <新表>
FROM  <原始表>
例:要将Authors表中“作者姓名、年龄、电子邮件”数据存储到一个新表中,并且
    要求插入新表时自动生成标识列字段。
    SELECT IDENTITY(int, 1, 1) as Id, AuthorName,Age,Email,City
    INTO NewAuthorsName
    FROM Authors
 
 
        查询数据
查询有条件限制的数据:
SELECT    <列名>
FROM      <表名>
[WHERE    <查询条件表达式>]
[ORDER BY <排序的列名>[ASC或DESC]]
例:SELECT AuthorName, Email, Age
    FROM Authors
    WHERE City=‘北京‘
    ORDER BY  AuthorID DESC
 
查询数据表中部分列:
SELECT AuthorName, Age, Sex, City
FROM Authors
 
使用“*”查找所有列:
SELECT  *   FROM  Authors
 
使用WHERE过滤部分行数据:
SELECT AuthorName, Age, Sex, City
FROM    Authors
WHERE City=‘北京’
 
使用As子句将列转别名:
SELECT AuthorName as ‘作者姓名‘, Email as 电子邮件, Age as ‘年龄‘
FROM  Authors
转别名还可以使用“=”
SELECT ‘作者姓名‘=AuthorName, 电子邮件=Email, 年龄=Age
FROM Authors
 
使用“+”连接多个字段,合并成一列:
SELECT AuthorName +‘   ‘+ City as 作者居住城市
FROM  Authors
 
使用Top关键字查询表中限定行数:
SELECT TOP 5 *  FROM  Authors
使用PERCENT按百分比取数据:
SELECT Top 30 PERCENT * FROM  Authors
 
在查询结果中使用常量列:
SELECT AuthorName as 作者姓名, 80 as 满意度
FROM Authors
 
使用DISTINCT关键字屏蔽重复数据:
SELECT DISTINCT City FROM Authors
 
使用IS  NULL查询空数据:
SELECT AuthorName, Birthday, City
FROM    Authors
WHERE Birthday IS NULL
如果填写了生日信息,然后又删了,如何查询出来?:
SELECT AuthorName, Birthday, City
FROM Authors
WHERE Birthday IS NULL OR Birthday=‘‘
 
UNION联合查询:
SELECT CustomerName as 姓名, City as 居住城市
FROM Customers UNION
SELECT AuthorName as 姓名, City as 居住城市
FROM Authors
 
LIKE进行模糊查询:
WHERE  <列名>  [NOT]  LIKE  <字符表达式>
 
IN进行模糊查询:
WHERE  <列名>  IN  <[常量列表]>
例:查询居住地是“北京”、“上海”、“西安“、“成都”的作者
    SELECT AuthorName, City
    FROM Authors
    WHERE City IN (‘北京‘,‘上海‘,‘西安‘,‘成都‘)
 
BETWEEN...And...进行模糊查询(在指定范围内):
WHERE  <列名>  [NOT]  BETWEEN  <起始表达式> And  <结束表达式>
例:查找单价在20到99元的图书信息
    SELECT BookCode, BookName, UnitPrice
    FROM Books
    WHERE UnitPrice Between 20 and 99
 
 
         修改数据
修改数据:
UPDATE  <表名>  SET  <列名=值>  [WHERE <更新条件>]
例:(1)将作者表中所有作者的居住城市都更改成“北京”
         UPDATE Authors SET City=‘北京’
    (2)将作者表中AuthorID为2的作者年龄更改成36岁
         UPDATE Authors SET Age=36 WHERE AuthorID=2
    (3)更新语句中还可以使用表达式
      UPDATE Books SET price=price-2
          WHERE CatagoryID=1 OR CatagoryID=2
 
 
           删除数据
删除数据:
(1)DELETE  FROM  <表名>  [WHERE <更新条件>]
     例:DELETE FROM Books WHERE BookCode=‘981267‘
(2)Truncate Table <表名>
      Truncate Table只删除表中的数据行
 
 
         排序
查询所有图书信息并按照价格字段升序显示:
SELECT BookName, Description, UnitPrice
FROM Books
ORDER By UnitPrice
例:查询单价在50元以上的图书信息,要求价格以8折显示,并按价格降序排列:
    SELECT BookName as 图书名, Description as 描述, UnitPrice * 0.8 as 单价
    From Books
    WHERE UnitPrice > 50
    ORDER By UnitPrice DESC
 
查询结果还可以按多列进行排序:
SELECT BookName as 图书名, CategoryID as 类别编号, UnitPrice as 单价
From Books
ORDER By CategoryID, UnitPrice DESC
例:(1)查询电话号码是13920298734的会员信息,要求显示会员名称、居住城市、会员等级。
         SELECT CustomerName as 会员名称, City as 居住城市, Grade as 会员等级
     FROM Customers
     WHERE TelPhone=‘13920298734‘
    (2)编写代码查询积分在500分以上的会员信息,并按积分降序排列。
     SELECT * FROM Customers
     Where Upoint>=500
     ORDER By Upoint DESC
 
 
         聚合函数
总积分 SUM:
SELECT SUM(Upoint) as 总积分 FROM Customers
 
平均分 AVG:
SELECT AVG(upoint) as 平均积分 FROM Customers
 
最高分和最低分 MAX和MIN :
SELECT MAX(upoint) as 最高积分, MAX(upoint) as 最低积分 FROM Customers
MAX和MIN除了计算数值列,还可以用于计算字符型以及日期时间类型数据列:
SELECT MAX(Birthday) as 最大日期 FROM Customers
 
COUNT(表达式)    返回结果集的非空行数。
COUNT(*):返回表中所有数据行的记录数:
例:SELECT COUNT(*) as 人数 FROM Customers WHERE upoint >300
COUNT(列名):返回指定列非空值个数。
例:SELECT COUNT(Address) as 个数 FROM Customers
 
 
        分组统计
SELECT   <字段列表>   [聚合函数]
FROM  表
[WHERE]  条件
GROUP BY  <字段列表>
 
HAVING子句对分组结果再次过滤:
SELECT  City as 居住城市, Sex as 性别, Count(*)  as 会员人数
FROM Customers
Group By City, Sex
HAVING Count(*) >= 2
 
 
          多表关联
内连接:
SELECT <列名>
FROM 表1  INNER  JOIN  表2
ON 表1.列名  条件运算符  表2.列名
[WHERE 条件]
[ORDER BY  排序列]
例:SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
    FROM Books as b INNER JOIN Authors as a
    ON b.AuthorID = a.AuthorID
    或:
    SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
    FROM Books b,  Authors a
    WHERE b.AuthorID = a.AuthorID
 
多表内连接:
SELECT <列名>
FROM (表1  INNER  JOIN  表2
ON 表1.列名  条件运算符  表2.列名)
INNER JOIN  表3
ON 表1.列名  条件运算符  表3.列名
……
[WHERE 条件]
[ORDER BY  排序列]
例:SELECT b.BookCode as 图书编号, c.PublisherName as 出版商名,b.BookName as 图书名称,a.AuthorName as 作者姓名
    FROM ( Books b INNER JOIN  Authors a
    ON b.AuthorID=a.AuthorID)  INNER JOIN Publisher c
    ON b.PublisherID=c.PublisherID
 
左外连接:
SELECT <列名>
FROM 左表  LEFT  [OUTER] JOIN  右表
ON 左表.列名  条件运算符  右表.列名
[WHERE 条件]
[ORDER BY  排序列]
例:SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
    FROM Books b LEFT JOIN  Authors a
    ON b.AuthorID=a.AuthorID
 
右外连接:
SELECT <列名>
FROM 左表  RIGHT  [OUTER] JOIN  右表
ON 左表.列名  条件运算符  右表.列名
[WHERE 条件]
[ORDER BY  排序列]
例:SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
    FROM Books b RIGHT JOIN  Authors a
    ON b.AuthorID=a.AuthorID
 
完全连接:
SELECT <列名>
FROM 左表  FULL  [OUTER] JOIN  右表
ON 左表.列名  条件运算符  右表.列名
[WHERE 条件]
[ORDER BY  排序列]
例:SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
    FROM Books b FULL JOIN  Authors a
    ON b.AuthorID=a.AuthorID
 
 
常用的条件运算符:
运算符    含义       示例
  =     等于       AuthorID=5
  >    大于       Price>50
  <    小于       Quantity<20
  >=    大于等于   Age>=50
  <=    小于等于   Price<=100
  <>    不等于       Birthday<>‘1970-10-10’
 
 
常与LIKE关键字配合使用,表示一个模糊的范围:
运算符    含义                                  示例
  %    任意长度的字符串            Email Like ‘%@%.com’
‘_’    任意一个字符                    AuthorName Like ‘张_’
 []    在指定范围内的一个字符            A Like ‘A6C8[1-5]’
 [^]    不在指定范围内的任意一个字符    A Like ‘A6C8[^1-6]’
 
 
逻辑运算符:
运算符    含义                                      示例
 And    连接的两个条件表达式都为True,           A > 90 And B >100
        表达式结果才为True,否则为False   
 Or    连接的两个条件表达式中有一个为True,     A >90 Or B >100
        则表达式结果就为True   
 Not    否定条件                             Not (A > 90)
 
 
         函数
字符串函数:
函数名                功能描述                        举例
 LEN         返回指定字符串的字符个数(而不是字节),        SELECT LEN(‘李丽然作者‘) 
             其中不包含尾随空格                                 返回:5
UPPER         将小写字符转换成大写字符                            SELECT UPPER(‘book图书表‘) 
                                返回:BOOK图书表
LTRIM         返回去掉左侧空格的字符串                            SELECT LTRIM(‘  Authors‘)   
                                返回: Authors
CHARINDEX    查找一个指定的字符串在另一个字符串中的起始位置    SELECT CHARINDEX(‘L‘, ‘HELLO‘, 1)   
                                返回:3
 LEFT         返回字符串中从左边开指定个数的字符                    SELECT LEFT(‘zhangsan‘, 2)   
                                返回:zh
DATALENGTH   返回指定字符串的字节数                            SELECT DATALENGTH(‘中国人‘)   
                                返回:6
REPLACE         替换一个字符串中的字符                            SELECT REPLACE(‘我爱我的家乡家乡‘, ‘家乡‘, ‘学校‘)   
                                返回: 我爱我的学校学校
SBUSTRING    从字符串串的起始位置连续取指定个数的子串            SELECT SUBSTRING(‘我爱我的家乡‘,3, 2)
                                                                返回:我的
 
数学函数:
函数名         功能描述                                      举例
 ABS      返回表达式绝对值                         SELECT ABS(-90)
                                 返回:90
ROUND      按指定的精度进行四舍五入             SELECT ROUND(56.629, 2)
                             返回:56.630
SQRT      返回指定表达式的平方根             SELECT SQRT(9)
                             返回:3
FLOOR      返回小于或等于指定数值表达式的最大整数    SELECT FLOOR(23.9)
                            返回: 23
CEILING      返回大于或等于指定数值表达式的最小整数    SELECT CEILING(23.9)
                            返回:24
 
日期函数:
函数名            功能描述                                 举例
GETDATE        得到当前系统日期                SELECT GETDATE()
                            返回:系统当前日期
DATEPART    返回指定日期部分的整数            SELECTDATEPART(dd, ‘01/09/2003‘)
                            返回:9
DATEADD        在指定的日期上累加数值得到新的日期        SELECT DATEADD(yyyy, 4, ‘01/09/2003‘)
                            返回:2007-01-09
DATEDIFF    返回两个日期的差值                SELECT DATEDIFF(dd, ‘02/05/2003‘, ‘02/09/2005‘)
                            返回:735
DATENAME    返回指定日期部分的字符串            SELECT DATENAME(dw, ‘02/02/2009‘)
                            返回: 星期一
YEAR        返回指定日期“年”部分整数            SELECT YEAR(GETDATE())
                            返回:当前年份整数
MONTH        返回指定日期“月”部分整数            SELECT MONTH(GETDATE())
                            返回:当前月份整数
DAY        返回指定日期“日”部分整数            SELECT DAY(GETDATE())
                            返回:当前日期整数
 
转换函数:
函数名    功能描述          举例
CONVERT    数据类型转换:      SELECT CONVERT(DateTime, ‘2020-09-09‘)                           
        将第2个参数转       返回: 2020-09-09 00:00:00.000
        换为第一个参数
        所指定的类型。        SELECT CONVERT(varchar(11), GETDATE(), 121)
                返回:2010-03-24
 
                 常用日期格式:  121:日期格式为 yyyy-mm-dd hh:mi:ss.mmm  111:日期格式为 yy/mm/dd
                SELECT CONVERT(varchar(5), 92.89)
                返回:92.89
 
 
创建表student:
create table tbl_student
(
    //列名、数据类型
    id int identity(1,1),
    stu_no char(8),
    stu_sex char(1),
    stu_age int,
    stu_address varchar(20),
)
 
主键约束:
alter table tbl_student
   add constraint PK_id primary key(id)
 
默认约束:
alter table tbl_student
    add constraint CK_sex check(stu_sex in(‘0‘,‘1‘))
 
唯一约束:
alter table tbl_student
    add constraint DF_address default(‘山东‘)for stu_address
 
检查约束:
alter table tbl_student
    add constraint UK_stuno unique(stu_no)
 
 
CHECK约束命名规范为CK_字段
年龄:Age>0 AND Age<=120
      年龄在0—120之间的
邮箱:Email Like ‘%@%‘
姓名:AuthorName Like‘张_‘
      例如:张三
A Like ‘A6C8[1-5]’ 表示以A6C8开头并且最后一位是1到5之间的任意字符的字符串
      例:A6C83
A Like ‘A6C8[^1-6]’ 表示以A6C8开头并且最后一位不是1到6之间的任意字符结尾的字符串
      例:A6C89
Fax:([Fax] like‘[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]‘ or [Fax] like ‘[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]‘)
 
将城市设置成默认北京
修改表中点到City下面有列属性,常规中默认值或绑定一栏写(‘北京’)
 

SQL语句