SQL学习笔记

SQL语言的专著与互联网资源已有不少,写这篇博客的主要目的是将SQL基本的语法尽可能简洁地总结出来。因此,本文对SQL的介绍不求详尽,而是尽量做到简洁、可读性强,主要语法便于随时查找。


一、基本概念:

DBMD:Database Management System, 数据库管理系统——用来管理数据库的计算机系统。

字段:表的列。

记录:表的行。

SQL语句分为三类:

DDL:(Data Definition Language,数据库定义语言)

CREATE创建数据库和表等对象
DROP删除数据库和表等对象
ALTER修改数据库和表等对象

DML : (Data Manipulation Language, 数据操作语言)

SELECT 查询UPDATE变更
INSERT插入DELETE 删除

DCL(Data Control Language, 数据控制语言)

COMMIT 确认对数据库中的数据进行的变更
ROLLBACK取消对数据库中的数据进行的表更
GRANT赋予用户操作权限
REVOKE 取消用户的操作权限

数据库与表的创建

CREATE  DATABASE  <数据库名称> ;创建数据库

CREATE  TABLE  <表名>

( <列名1>   <数据类型>  <该列所需约束>,

   <列名2>    <数据类型>    <该列所需约束>,


                               ……


   <该表的约束1> , <该表的约束2>,……) ;

创建表

数据类型

INTEGER整数型CHAR定长字符串
DATE日期型VARCHAR可变长字符串

表的删除和更新

DROP  TABLE  <表名> ;删除表
ALTER  TABLE  <表名>  ADD  COLUMN  <列的定义> ;添加列
ALTER  TABLE  <表名>  DROP  COLUMN  <列名> ;删除列


二、查询

基本查询

SELECT  <列名> , ……

 FROM  <表名>;

从表中查询列

SELECT  *

  FROM  <表名>  ;

查询全部列

SELECT  <列名>   AS   <新列名> ,

  FROM  <表名>  ;

为列设定别名

注:使用汉语时需要用双引号 “ ”  括起来

SELECT  <常数>  AS  <列名>,

 FROM  <表名> ;

查询常数;

常数可以为字符串常数、数字常数、日期常数等

SELECT  DISTINCT  <列名>

 FROM   <表名> ;

查询结果中删除重复的数据

SELECT   <列名> ,    ……

 FROM    <表名>

 WHERE   <条件表达式>  ;

指定条件的查询
运算符
+>大于
-  >=大于等于
*!>不大于
/BETWEEN     AND介于指定的两值之间
=等于IS   NULL为NULL值
<>不等于NOT
!=不等于AND
<小于OR
<=小于等于


SELECT  COUNT(*)

 FROM   <表名>  ;

计算全部行数

SELECT  COUNT(<表名>)

 FROM   <表名>   ;

计算NULL之外的数据行数   

SELECT  SUM(<列名>)

 FROM   <表名>  ;

计算此列的合计值

SELECT   AVG(<列名>) 

 FROM   <表名>  ;

计算此列的平均值

SELECT   MAX(<列名1>) ,     MIN(<列名2>)

 FROM   <表名>  ;

计算列1的最大值,列2的最小值

SELECT   COUNT(DISTINCT   <列名>)

 FROM   <表名>  ;

计算去除重复数据后的行数

SELECT   DISTINCT  COUNT( <列名> )

 FROM   <表名>  ;

先计算数据行数再删除重复数据

分组

SELECT   <列名1>,  <列名2> ,  ……

 FROM    <表名>

GROUP    BY   <列名1>  ;

按列1进行分组

SELECT   <列名1> ,<列名2>, ……

 FROM <表名>

GROUP    BY  <列名1>

HAVING   <分组结果对应的条件> ;

取出符合指定条件的组


排序

SELECT  <列名1> ,   <列名2> ,  ……

 FROM   <表名>

ORDER   BY  <排序基准列1> , <排序基准列2> , ……  ;

按指定的排序基准列排序;

有多个基准列时,先按第一个基准列排序,

再按第二个基准列排序,依此类推;

默认按升序排列

SELECT  <列名1> ,   <列名2> ,  ……
 FROM   <表名>  
ORDER   BY  <排序基准列>   DESC ;
按降序排列


视图

CREATE   VIEW   视图名称 (<视图列名1> ,  <视图列名2> ,……)
AS
<SELECT语句>  ;
创建视图
注:创建视图时不能使用ORDER  BY子句
SELECT   <视图列名1> ,  <视图列名2> ,……
 FROM  视图名称  ;
使用视图
DROP  VIEW   视图名称 (<视图列名1> , <视图列名2>, ……) ;删除视图

三、修改

插入

INSERT  INTO  <表名>  (列1,列2,……)    VALUES(值1,值2,……) ;

在表中插入列清单和相应的值清单

注:所谓清单就是括在括号内,

用逗号分隔的这种形式  

INSERT  INTO  <表名>      VALUES(值1,值2,……) ;

对表进行全列INSERT时,

可以省略表名后面的列清单

INSERT  INTO  <表名>  (列1,列2,……)   VALUES(值1,NULL,……) ;
向列2中插入NULL
INSERT  INTO  <表名>  (列1,列2,……)   VALUES(值1,DEFAULT,……) ;

若在创建表时设定了默认值,

则在INSERT时可自动为列赋值

INSERT  INTO  <表名2>  (列1,列2,……)    

SELECT   (列1,列2,……)

  FROM    <表名1>  ;

将表1中的数据复制到表2

注:该INSERT语句中的

SELECT语句也可以使用

WHERE子句或GROUP  BY

子句等


删除

DROP   TABLE   <表名>完全删除整张表
DELETE   FROM  <表名> ; 仅删除全部数据行,保留数据表

DELETE   FROM  <表名> 

WHERE   <条件> ;

删除部分数据行

更新

UPDATE  <表名>

     SET   <列名>  =  <表达式> ;

更新数据

UPDATE  <表名>

      SET   <列名>  =  <表达式>

WHERE   <条件> ;

更新部分数据行
UPDATE  <表名>

     SET   <列名>  =  NULL

WHERE   <条件> ;

更新为NULL
UPDATE  <表名>

      SET   <列名1>  =  <表达式1>

                <列名2>  =  <表达式2>  

WHERE   <条件> ;
多列更新
UPDATE  <表名>
      SET ( <列名1> , <列名2> ) = ( <表达式1> , <表达式2> )
WHERE   <条件>  ;
多列更新

事务

BEGIN  TRANSACTION

       UPDATE  <表名>
             SET   <列名>  =  <表达式1>

       WHERE   <条件1> ;


       UPDATE  <表名>
             SET   <列名>  =  <表达式2>

        WHERE   <条件2> ;

COMMIT ;

事务处理

注:MySQL中应将BIGIN换为START

BEGIN  TRANSACTION
       UPDATE  <表名>
             SET   <列名>  =  <表达式1>
       WHERE   <条件1> ;

       UPDATE  <表名>
             SET   <列名>  =  <表达式2>
        WHERE   <条件2> ;
ROLLBACK ;

取消事务处理

注:MySQL中应将BIGIN换为START


四、函数、谓词、CASE表达式

算术函数

ABS(数值)绝对值
MOD(被除数,除数)求余
ROUND(对象数值,保留的小数位数)四舍五入


字符串函数

字符串1  ||  字符串2 拼接两个字符串
LENGTH (字符串)字符串长度
LOWER (字符串)小写转换
UPPER (字符串)大写转换
REPLACE (对象字符串,对象字符串中欲替换的部分字符串,替换后的字符串)字符串替换
SUBSTRING (对象字符串  FROM  截取的起始位置  FOR  截取的字符数)

字符串截取

注: 只适用于MySQL和PostgreSQL

SUBSTRING (对象字符串    截取的起始位置   截取的字符数)

字符串截取

注:只适用于SQL Server

SUBSTR (对象字符串   截取的起始位置    截取的字符数)

字符串截取

注:只适用于Oracle和DB2

日期函数
CURRENT_DATE

当前日期

注:没有参数,无需使用括号

CURRENT_TIME   

当前时间

注:没有参数,无需使用括号

CURRENT_TIMESTAMP

当前日期和时间

注:没有参数,无需使用括号

EXTRACT (日期元素  FROM  日期)

截取日期元素;

日期元素有YEAR, MONTH, DAY, HOUR, MINUTE, SECOND

注:返回值不是日期类型,而是数值类型


转换函数

CAST (转换前的值  AS  想要转换的数据类型)类型转换
COALESCE (数据1, 数据2, ……)

将NULL转换为其它值,

返回可变参数中左侧开始第一个不是NULL的值

注:所谓“可变参数”是指参数的个数不固定,可自由设定


聚合函数

COUNT()记录数(行数)
SUM()合计值  
AVG()平均值
MAX()最大值
MIN()最小值

LIKE谓词——字符串的部分一致查询

LIKE   'abc%'

选出以abc开头的所有字符串

注1:这里abc为举例,实际上可以为任意字符串,下同

注2:Access中需要使用 *  而不是%,下同

LIKE   '%abc%'

选出包含abc的所有字符串
LIKE   '%abc'选出以abc结尾的所有字符串
LIKE  'abc_'

选出包含 “abc+任意一个字符” 的所有字符串

注:Access中需要使用 ?  而不是  _ 

LIKE  'abc_ _'选出包含 “abc+任意两个字符” 的所有字符串
LIKE  [ ]

匹配方括号中的任意一个字符,且只能匹配单个字符

注:只适用于Access和SQL Server

例:LIKE  '[ab%]'     选出所有以a开头或以b开头的字符串

LIKE  [^  ]

匹配不在方括号中的字符串

注1:只适用于Access和SQL Server

注2:Access中需要使用 !而不是 ^

例:LIKE '[^ab%]'     选出所有不以a开头或不以b开头的字符串   



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值