SQL简介&语法糖

一、SQL是什么

    SQL(Structured Query Language)结构化查询语言,由美国国家标准协会制定的标准。

二、几种数据库

    1、微软:sql server、access

    2、瑞典MySQL:AB公司 mysql

    3、日本IBM:db2、informix

    4、美国Sybase:sybase

    5、美国ORACLE:oracle    

可分为四类:

    小型:access(小而可爱)

    中型:不好划分

    大型:oracle(较安全)、sql server(稍弱)、sybase、informix(稍弱、安全[银行多用])、mysql

    海量:db2

    补充:数据库选择的衡量:成本、功能多少、并发性(最终用户是多少)、安全。

三、基本语法

这里拿一张Student表、一张Subjects表举例:


Student表

这里ID为主键

Subjects表

这里ID为主键

增:

单条插入:INSERT INTO Student (ID,Name,gender) VALUES (1,"ZhangSan","Nan") 

多条插入:INSERT INTO Student (ID,Name,gender) VALUES (2,"WangSan","Nan"),(3,"LiSan","Nv")

删:

删除某行:DELETE FROM Student WHERE ID = 2

删除所有:DELETE FROM Student 或者 DELETE * FROM Student

改:

单条更改:UPDATE Student SET Name="LaLa" WHERE gender='Nan'

所有gender为Nan的学生名字都改为LaLa了

多条件更改:UPDATE Student SET Name="Sun" WHERE gender='Nan' and ID = 1

gender为Nan且ID为1的学生名字改为Sun了

查:

查所有:SELECT * FROM Student

*表示所有字段

查所有学生性别: SELECT gender FROM Student

这里有多少学生性别,就会都拉出来,但是学生就只有两个性别。这里可以用:DISTINCT

不重复:SELECT DISTINCT gender FROM Student

查并排序: ORDER BY (默认升序排序)

某属性按照字母顺序排序:SELECT ID,Name,gender FROM Student ORDER BY Name

某属性按照字母逆序排序:SELECT ID,Name,gender FROM Student ORDER BY Name DESC

多属性排序:SELECT ID,Name,gender FROM Student ORDER BY Name,ID

先按照Name排序,再按照ID从小到大排序

多属性逆序排序:SELECT ID,Name,gender FROM Student ORDER BY Name DESC,ID ASC

先按照Name逆序排序,再按照ID从小到大排序

四、通配符

%                                         =》       替代一个或多个字符

_                                          =》       仅替代一个字符

[charlist]                             =》       字符列中的任何单一字符

[^charlist]或[!charlist]       =》       不在字符列中的任何单一字符

五、高级语法

TOP 子句:用于规定要返回的记录的数目

SQL Server 的语法(前多少条):SELECT TOP 2 * FROM Student

SQL Server 的语法(百分比):SELECT TOP 20 PERCENT * FROM Student

MySQL 语法:SELECT *FROM Student LIMIT 5

Oracle 语法:SELECT *FROM StudentWHERE ROWNUM <= 2

LIKE操作符:用于在 WHERE 子句中搜索列中的指定模式

LIKE

SQL LIKE 操作符语法: 

SELECT * FROM Student WHERE Name LIKE 'S%'

找出名字以N开头的数据

SELECT * FROM Student WHERE Name LIKE '%g'

找出名字以g结尾的数据

SELECT * FROM Student WHERE Name LIKE '%a%'

找出名字含有a的数据

NOT LIKE

SQL NOT LIKE 操作符语法:

SELECT * FROM Student WHERE Name NOT LIKE 'S%'

找出名字不以S开头的数据

IN 操作符:允许我们在 WHERE 子句中规定多个值

SELECT 语句:SELECT * FROM Student WHERE Name IN ('Sun','LiSan')

BETWEEN 操作符:选取介于两个值之间的数据范围

SELECT 语句:SELECT * FROM Student WHERE Name BETWEEN 'Sun' AND 'WangWu'

显示介于 "Sun"(包括)和 "WangWu"(不包括)之间的人

Alias(别名):列名称和表名称指定别名

表的 SQL Alias 语法:SELECT A.Name FROM Student AS A

列的 SQL Alias 语法:SELECT Name AS aa FROM Student

JOIN:根据两个或多个表中的列之间的关系,从这些表中查询数据

SELECT引用两个表语句: SELECT Student.ID,Student.Name,Subjects.Chinese,Subjects.English FROM Student,Subjects WHERE Student.ID = Subjects.ID

SELECT JOIN 语句:SELECT Student.ID,Student.Name,Subjects.Chinese,Subjects.English FROM Student INNER JOIN Subjects ON Student.ID = Subjects.ID

*JOIN 使用类型,以及它们之间的差异:

   1、JOIN: 如果表中有至少一个匹配,则返回行

    2、LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

    3、RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

    4、FULL JOIN: 只要其中一个表中存在匹配,就返回行

UNION:操作符用于合并两个或多个 SELECT 语句的结果集

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL

SELECT UNION 语句:select ID From Student UNION select ID From Subjects

SELECT INTO:语句可用于创建表的备份复件

从 "Student" 表中提取居住在 "Beijing" 的人的信息,创建了一个带有两个列的名为 "Persons_Order_Backup" 的表:SELECT LastName,Firstname INTO Persons_Order_Backup FROM Student WHERE Student.ID=1

创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Student 和 Subjects 两个表中取得的信息:SELECT Student.Name,Subjects.Chinese,Subjects.English INTO Persons_Order_Backup FROM Student INNER JOIN Subjects ON Student.ID=Subjects.ID

CREATE DATABASE:创建数据库

SQL语句:CREATE DATABASE database_name

CREATE TABLE:用于创建数据库中的表

SQL语句:CREATE TABLE 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....)


数据类型

Constraints:约束用于限制加入表的数据的类型

NOT NULL:不能为空

UNIQUE:约束唯一标识数据库表中的每条记录;请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

PRIMARY KEY:主键

FOREIGN KEY:外键

CHECK:约束用于限制列中的值的范围

DEFAULT:约束用于向列中插入默认值

CREATE INDEX:用于在表中创建索引(作用:在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。)

创建一个简单的索引,名为 "PersonIndex",在 Students 表的 Name 列:CREATE INDEX PersonIndexON Students (Name)

DROP:可以轻松地删除索引、表和数据库

用于 Microsoft SQLJet (以及 Microsoft Access) 的语法:DROP INDEX index_name ON table_name

用于 MS SQL Server 的语法:DROP INDEX table_name.index_name

用于 IBM DB2 和 Oracle 语法:DROP INDEX index_name

用于 MySQL 的语法:ALTER TABLE table_name DROP INDEX index_name

ALTER:用于在已有的表中添加、修改或删除列

SQL 语句添加:ALTER TABLE Student ADD Birthday date

SQL 语句修改:ALTER TABLE Student ALTER COLUMN Birthday year

SQL 语句删除:ALTER TABLE Student DROP COLUMN Birthday

AUTO INCREMENT:新记录插入表中时生成一个唯一的数字

MySQL 的语法:CREATE TABLE Persons(P_Id int NOT NULL AUTO_INCREMENT,PRIMARY KEY (P_Id))

SQL Server 的语法:CREATE TABLE Persons(P_Id int PRIMARY KEY IDENTITY)

Access 的语法:CREATE TABLE Persons(P_Id int PRIMARY KEY AUTOINCREMENT)

Oracle 的语法:

CREATE SEQUENCE seq_person

MINVALUE 1

START WITH 1

INCREMENT BY 1

CACHE 10

Oracle 语法解释:建名为 seq_person 的序列对象,它以 1 起始且以 1 递增。该对象缓存 10 个值以提高性能。CACHE 选项规定了为了提高访问速度要存储多少个序列值。

Date:日期

My SQL
SQL Server

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

DATE - 格式 YYYY-MM-DD

DATETIME - 格式: YYYY-MM-DD HH:MM:SS

TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS

YEAR - 格式 YYYY 或 YY

SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

DATE - 格式 YYYY-MM-DD

DATETIME - 格式: YYYY-MM-DD HH:MM:SS

SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS

TIMESTAMP - 格式: 唯一的数字

SQL语句:SELECT * FROM Student WHERE OrderDate='2008-12-26'(从表中选取 OrderDate 为 "2008-12-26" 的记录)

NULL:值是遗漏的未知数据

IS NULL:SELECT Name FROM Student WHERE gender IS NULL

IS NOT NULL:SELECT Name FROM Student WHERE gender IS NOT NULL

ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数函数

SQL Server / MS Access语法:SELECT ID,2*(Chinese+ISNULL(English,0)) FROM Subjects

Oracle语法:SELECT ID,2*(Chinese+NVL(English,0)) FROM Subjects

MySQL语法:SELECT ID,2*(Chinese+IFNULL(English,0)) FROM Subjects     或者(OALESCE() 函数):SELECT ID,2*(Chinese+COALESCE(English,0)) FROM Subjects

数据类型:详细说明

服务器 :详细说明










未完待撸...

你可能感兴趣的:(SQL简介&语法糖)