SQL语法

一、SQL是什么?
     SQL是结构化查询语言Structured Query Language的简称,是一门ANSI的标准计算机语言,用来访问和操作数据库系统。      SQL语句用于取回和更新数据库中的数据。SQL可与数据库程序协同工作。

二、SQL能做什么?
    1. SQL面向数据库执行查询;(查询)
    2. 可从数据库取回数据;(取出数据)
    3. 向数据库中插入新的记录;(增加)
    4. 更新数据库中的数据;(更新)
    5. 删除数据库中的数据;(删除)
    6. 创建新数据库;(建库)
    7. 在数据库中创建新表(建表)
    8. 在数据库中创建存储过程(建存储过程);
    9. 在数据库中创建视图;
    10. 设置表、存储过程和视图的权限;
     简而言之,使用SQL可以对数据库进行建表、建库、建存储过程、查询操作,对数据库中的数据进行增、删、改、查操作以及设置权限等操作。

三、与SQL相关的术语
     RDBMS     :Relationshop Database Management System 关系型数据管理系统 ,它是SQL的基础,同样也是所有现代数据库系统的基础;
     Table     :数据库对象,它表示相关数据项的集合,它由列和行组成,用于存储RDBMS的数据。一个数据库通常包含一个或多个表。每张表由一个     名字标识,表种包含数据的记录。

     DML     :date manipulation language,SQL中处理数据等操作统称为数据操纵语言。它包含SELECT、UPDATE、INSERT、DELETE这四条命令,这些命令用来对数据库里的数据进行增删改查等操作的语言。
     DDL     :date definition language,数据定义语言用于定义和管理 SQL 数据库中的所有对象的语言。主要的命令有CREATE、ALTER、DROP可以用于CREATE DATABASE - 创建新数据库,ALTER DATABASE - 修改数据库,CREATE TABLE - 创建新表,ALTER TABLE - 变更(改变)数据库表,DROP TABLE - 删除表
,CREATE INDEX - 创建索引(搜索键),DROP INDEX - 删除索引
,等。DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,大多在建立表时使用。
     DCL     : Data Control Language,数据控制语言,是数据库控制功能, 用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等 。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有
sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL。常用的命令有 COMMIT(提交),SAVEPOINT(保存点),ROLLBACK(回滚),SET TRANSACTION(设置当前事物的特性)。
                    SQL参照:http://www.w3school.com.cn/sql/sql_syntax.asp)。

四、SQL语法(SQL语句不区分大小写,即大小写不敏感)

   1、常用基本语法:

(1) SELECT 查询语句:主要用于从表中选取数据,查询结果放在一个结果集中。
    语法: SELECT 列明 FROM 表名
          以及
      SELECT * FROM 表名。
    例如:从student表中查询所有学生的姓名,SQL语句为:SELECT st_name FROM student;
      查询所有学生的信息,SQL语句为:SELECT * FROM student;

(2)SELECT DISTINCT: 用于查询唯一不同的值,去除重复的值。
   语法: SELECT DISTINCT  列名  FROM 表名

   (3)WHERE 子句:用于条件查询数据,可置于SELECT句中。
       语法:SELECT 列名 FROM 表名 WHERE 列 运算符  值
            例如:SELECT * FROM stduent WHERE name='lean'
             可在 WHERE 子句中使用的运算符:
操作符
描述
=
等于
<>
不等于
>
大于
<
小于
>=
大于等于
<=
小于等于
BETWEEN
在某个范围内
LIKE
搜索某种模式

注意:WHERE子句中的引号的使用,SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号


     (4) AND 和 OR 运算符:AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
                       如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录;
                       如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录;
     例如:
使用AND来显示所有姓为"Carter"并且名为"Thomas"的人:SELECT * FROM student WHERE   firstName ='Thomas' AND lastName ='Carter'
使用 OR 来显示所有姓为"Carter"或者名为"Thomas"的人:SELECT * FROM student WHERE firstname='Thomas' OR lastname='Carter'
也可使用将AND和OR结合起来使用:SELECT*FOM student WHERE(firstName='Thomas'OR firstName='William')AND lastName='carter'

     (5) ORDER BY 语句: 用于对结果集进行排序,默认按照升序对指定列结果集进行排序,若按降序排序则使用desc关键字。
          例如:根据学生年龄对学生进行升序排序:SELECT name FROM student ORDER BY age  
               根据学生年龄对学生进行降序排序:SELECT name FROM student ORDER BY age  DESC

     (6)INSERT INTO 语句: 用于向表格中插入新的行,或者向指定的列插入数据。
          语法:插入新的行:INSERT INTO 表名称 VALUES (值1, 值2,....)
             向指定列插入数据:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
       例如:INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
             INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

     (7)Update 语句: 语句用于修改表中的数据
          语法UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
            例如:更新某一行中的一个列:UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
             更新某一行中的若干列:UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'

 (8)DELETE 语句: 用于删除表中的行
语法:DELETE FROM 表名称 WHERE 列名称 = 值
例如:删除某行:DELETE FROM Person WHERE LastName = 'Wilson'
     删除所有行:DELETE FROM table_name     或者     DELETE * FROM table_name

2、高级语法

     (1)TOP子句:
用于规定要返回的记录的数目。对于拥有上千条记录的大型表来说,TOP子句是非常有用的,然而值得注意的是,并非所有的数据库系统都支持TOP子句。语法以MySQL和oracle的为例。
         MySQL语法:SELECT * FROM  表名 LIMIT 数值
         Oracle语法:SELECT 列名 FROM 表名 WHERE ROWNUM <= 数值 

     (2) LIKE 操作符 和通配符:用于在 WHERE 子句中搜索列中的指定模式。

通配符 描述
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符

[^charlist]

或者

[!charlist]

不在字符列中的任何单一字符
语法:SELECT 列名 FROM 表名 WHERE 列名 LIKE 表达式
举例:查询姓名以‘N’开头的学生姓名
      SELECT * FROM student WHERE name LIKE'N%'
      查询姓名以‘m’结尾的学生的姓名
      SELECT * FROM student WHERE name LIKE '%m'
      查询姓名中包含‘om’的学生的姓名
      SELECT * FROM student WHERE name LIKE'%om%'
      查询姓名中不包含‘om’的学生的姓名
      SELECT * FROM student WHERE name NOT LIKE'%om%'
         查询名字的第一个字符之后是 "eorge" 的人
      SELECT * FORM student WHERE name LIKE '_eorge '
      查询姓名以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er":
      SELECT * FROM student WHERE name LIKE'C_r_er'
 
查询姓名以'a','n','m'开头的学生信息
  SELECT * FROM student WHERE name LIKE '[a n m ]'
查询姓名不以'a','n','m'开头的信息
     SELECT * FROM student WHERE name LIKE '[a n m ]'

(3) IN 操作符:允许在 WHERE 子句中规定多个值。
语法:SELECT 列名 FROM 表名 WHERE 列名 IN (value1,value2,value。。。。
举例:从student表中查询姓氏 adams 和 carter的
SELECT * FROM student WHERE firstName IN('adams' ,‘carter ’)

(4) BETWEEN 操作符:在 WHERE 子句中使用,用于选取介于两个值之间的数据范围。
语法:SELECT * FROM 表名 WHERE 列名 BETWEEN value1 AND value2
举例:查询年龄在18-20岁之间的学生信息
      SELECT * FROM student WHERE age BETWEEN 18 AND 20
      查询年龄不在18-20岁之间的学生信息
               SELECT * FROM student WHERE age BETWEEN 18 AND 20

    (5) AS 操作符:用于为列名、表名指定别名。
          语法:为表指定名:     SELECT 列名 FROM 表名 AS 别名
          为列指定别名:     SELECT 列名 AS 别名 FROM 表名
          举例: 有两个表分别是:"stduent" 和 "orders"。分别为它们指定别名 "p" 和 "po"。现在,列出 "John Adams" 的所有定单。可以使用下面的 SELECT 语句:
                SELECT po.orderID, p.lastName,p.firstName FROM Persons AS P,Product_Orders po WHERE p.lastName='Adams' AND p.firstName='John'

(6) JOIN  和 KEY:常用语多表查询,连接多个表。语法通过下面的例子说明
student表
Id_s
lastName
firstName
address
city
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
order表
Id_o
orderNo
Id_s
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764
65
普通写法:
SELECT  student.lastName,student.firstName,order.orderNo FROM student,order Where  student.Id_s =order.Id_s
使用  JOIN :SELECT  stduent.lastName,student.firstName,order.Id_o FROM student INNER  JOIN  order ON student.Id_s=order.Id_s

(7) INNER JOIN 关键字(与JOIN 相同):在表中存在至少一个匹配,INNER JOIN 关键字返回。
    语法:SELECT 列名 FROM 表名1 INNER JOIN 表名2 ON  表名1.列名 = 表名2.列名

"Persons" 表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

列出所有人的定购。
SELECT  LastName,FirstName FROM Persons INNER JOIN Orders ON  Persons.Id_P=Orders.Id_O
ORDER BY Persons.LastName

(8) LEFT JOIN :从左表(表1)返回所有的行,即使右表(表2)中没有匹配的行
语法: SELECT 列名 FROM 表1 LEFT JOIN 表二 ON 表1.列名=表二.列名。
(注意:在某些数据库中,LEFT JOIN 又称为 LEFT OUT JOIN )
举例:
"Persons" 表:
Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

列出所有的人,以及他们的定购 - 如果有的话
SELECT * FROM Persons  LEFT JOIN   Orders ON Persons.Id_P=Orders.Id_P ORDER BY  Persons .LastName
从左表(表1)返回所有的行,即使右表(表2)中没有匹配的行

(9)RIGHT JOIN :从右表中(表二)返回所有的行,即使左表(表一)中没有匹配的行。
     语法: SELECT 列名 FROM 表1 RIGHT JOIN 表二 ON 表1.列名=表二.列名。
     (注意:在某些数据库中,LEFT JOIN 又称为 RIGHT OUT JOIN )
举例:
"Persons" 表:
Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

SELECT firstName,lastName ,orderNo FROM  Persons RIGHT JOIN Orders ON Persons.Id_P=Orders.Id_P


(9) FULL JOIN :只要其中某个表存在匹配,FULL JOIN 就会返回行。
语法:SELECT 列名 FROM 表名1 FULL JOIN 表名2 ON 表名1.列名=表名2.列名
举例:"Persons" 表:
Id_P
LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
"Orders" 表:
Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

SELECT lastName ,firstName, orderNo FROM Persons FULL JOIN Orders  ON Persons.Id_P=Orders.Id_P
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值