一、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表举例:
这里ID为主键
这里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:日期
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
数据类型:详细说明
服务器 :详细说明
未完待撸...