SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准化编程语言。SQL由国际标准化组织(ISO)和美国国家标准协会(ANSI)标准化。SQL通过一系列的语句来执行数据的插入、查询、更新和删除等操作。支持SQL语言的数据库包括:Oracle、MySQL、SQL Server、PostgreSQL、SQLite等。
下面中给的.sql示例文件在Microsoft SQL Server Management Studio 中可直接执行。操作步骤:打开SQL Server Management Studio:依次点击:文件 --> 打开 --> 文件:选择sql文件打开;点击执行即可,如下图所示:
1.创建(CREATE):
(1).创建数据库:
/*
CREATE DATABASE:用于创建数据库
CREATE DATABASE dbname
*/
CREATE DATABASE school
(2).创建表:
/*
CREATE TABLE:用于创建新的数据库表
CREATE TABLE table_name (
column1 data_type constraint,
column2 data_type constraint,
...
)
约束(constraint):
NOT NULL:指示某列不能存储NULL值,在默认的情况下,表的列接受NULL值
UNIQUE:保证某列的每行必须有唯一的值
PRIMARY KEY:NOT NULL和UNIQUE的结合,确保某列(或两个列多个列的结合)有唯一标识。每个表可以有多个UNIQUE约束,但是每个表只能有一个PRIMARY KEY约束
FOREIGN KEY:用于预防破坏表之间连接的行为。一个表中的FOREIGN KEY(外键)指向另一个表中的PRIMARY KEY(主键)
CHECK:保证列中的值符合指定的条件
DEFAULT:规定没有给列赋值时的默认值
*/
/*
CREATE TABLE teacher (
id int,
name char(32),
addr char(64),
age int,
sex char(8)
)
*/
CREATE TABLE teacher2 (
id int NOT NULL PRIMARY KEY CHECK(id>1000),
name char(32) NOT NULL UNIQUE,
addr char(64) DEFAULT 'TianJin',
age int,
sex char(8)
)
约束用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止。约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。
(3).创建索引:
/*
CREATE INDEX:用于在表中创建索引,以加快查询速度
CREATE INDEX index_name ON table_name (column_name)
*/
CREATE INDEX idx ON student (id, name)
(4).创建视图:
/*
CREATE VIEW: 创建视图。视图中的字段就是来自一个或多个数据库中的真实的表中的字段
CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition
*/
CREATE VIEW big_age AS SELECT id, name, sex, age FROM student WHERE age>20
视图是可视化的表。视图本质上是一个虚拟的表,它并不存储数据,而是基于基础表的查询结果生成。更新视图的实质是通过更新视图所基于的表中的数据,然后视图会反映这些变化。
2.插入(INSERT INTO):
/*
INSERT INTO:用于向表中插入新数据
INSERT INTO table_name(column1, column2, ...) VALUES(value1, value2, ...)
*/
-- INSERT INTO语句可以有两种编写形式
-- 第一种形式无需指定要插入数据的列名,只需提供被插入的值即可
INSERT INTO student VALUES(1013, '小王', '女', 35, 2016-10-15)
INSERT INTO student VALUES(1014, 'Lucy', 'woman', 5, '2020-11-25 10:10:10')
-- 第二种形式需要指定列名及被插入的值
INSERT INTO student(id, name, sex, age) VALUES(1020, 'Lucy', '女', 10)
3.更新(UPDATE):
/*
UPDATE:用于更新/调整数据库表中的现有数据
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition
*/
UPDATE student set sex='man', age=88 WHERE name='小王'
4.查询(SELECT):
/*
SELECT:用于从数据库中查询数据,结果被存储在一个结果表中,称为结果集
SELECT column_name(s) FROM table_name WHERE condition ORDER BY column_name [ASC|DESC]
WHERE:用于指定筛选条件
ORDER BY:用于对结果集进行排序:ASC:升序(默认);DESC:降序
GROUP BY:用于将结果集按一列或多列进行分组
HAVING:用于对分组后的结果集进行筛选
JOIN:用于将两个或多个表的记录结合起来
DISTINCT:用于返回唯一不同的值: SELECT DISTINCT column1, column2, ... FROM table_name
BETWEEN:选取介于两个值之间的数据范围内的值,这些值可以是数值、文本或者日期
LIKE:用于在WHERE子句中进行模糊查询,通常与%(匹配任意字符(包括零个字符))和_(匹配单个字符)通配符一起使用
IN:允许在WHERE子句中规定多个值
*/
SELECT * FROM student -- 显示表student的所有数据
SELECT name, age FROM student -- 仅显示name和age列数据
SELECT * FROM student WHERE age > 20 ORDER BY age DESC -- 显示age>20的所有数据,并按降序排列
SELECT DISTINCT sex FROM student -- 最多显示2条数据
SELECT * FROM student WHERE sex='男' -- 显示表student中sex为男的数据
SELECT * FROM student WHERE age >= 21 AND age < 100 -- 显示age>=21并且age<100的所有数据
SELECT * FROM student WHERE age BETWEEN 21 AND 100 -- 显示age>=21并且age<=100的所有数据
SELECT * FROM student WHERE name LIKE '小%' -- 显示name是小开头的所有数据
SELECT * FROM student WHERE name NOT LIKE '小%' -- 显示name不是小开头的所有数据
SELECT * FROM student WHERE age IN(10, 20) -- 显示age为10和20的所有数据
在SQL中限制查询返回的结果集中的行数,通常用于只需要查询前几行数据的情况,在SQL Server可使用SELECT TOP,在MySQL、PostgreSQL中可使用SELECT LIMIT。
WHERE子句中支持的运算符:=、<>、>、<、>=、<=、BETWEEN、LIKE、IN。
AND和OR运算符用于基于一个以上的条件对数据进行过滤。
ORDER BY关键字用于对结果集进行排序。默认按照升序对数据进行排序。如果需要按照降序对数据进行排序,可以使用DESC关键字。
JOIN子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
UNION操作符用于合并两个或多个SELECT语句的结果。
5.删除:
(1).删除表中数据(DELETE):
/*
DELETE:用于从表中删除数据
DELETE FROM table_name WHERE condition
*/
DELETE FROM student WHERE age=5 OR name='Tom'
(2).删除索引(DROP INDEX):
/*
DROP INDEX:用于删除索引
DROP INDEX index_name ON table_name
*/
DROP INDEX idx ON student
(3).删除表(DROP TABLE/TRUNCATE TABLE):
/*
DROP TABLE:用于删除表,将同时删除表的结构以及存储在其中的所有数据
DROP TABLE table_name
*/
DROP TABLE teacher2
/*
TRUNCATE TABLE:用于快速删除表中的所有数据,但保留表的结构(列、约束等),与DELETE语句相比,TRUNCATE TABLE通常更快。无法进行回滚
TRUNCATE TABLE table_name
*/
TRUNCATE TABLE teacher
(4).删除视图(DROP VIEW):
/*
DROP VIEW:撤销(或删除)视图
DROP VIEW view_name
*/
DROP VIEW big_age
(5).删除数据库(DROP DATABASE):
/*
DROP DATABASE:用于删除数据库,包括其中的所有表、视图、存储过程等数据库对象
DROP DATABASE dbname
*/
DROP DATABASE school
6.对已存在的表的列进行操作(ALTER TABLE):
/*
ALTER TABLE:用于在已有的表中添加、删除、修改列
ALTER TABLE table_name ADD column_name data_type -- 添加列
ALTER TABLE table_name DROP COLUMN column_name -- 删除列
*/
ALTER TABLE teacher ADD interest char(64) -- 添加列: interest
ALTER TABLE teacher DROP COLUMN age -- 删除列: age
ALTER TABLE teacher ALTER COLUMN sex int -- 修改列sex类型为int
7.聚合函数:
-- SQL拥有很多可用于计数和计算的内建函数
SELECT AVG(age) AS age_avg FROM student -- 返回数值列age的平均值
SELECT COUNT(*) AS nums FROM student -- 返回表中的记录数
SELECT MAX(age) AS age_max FROM student -- 返回指定列age的最大值
SELECT MIN(age) AS age_min FROM student -- 返回指定列age的最小值
SELECT SUM(age) AS age_sum FROM student -- 返回数值列age的总数
SELECT UPPER(sex) AS sex_ucase FROM student -- 把字段sex的值转换为大写:UPPER(SQL Server)/UCASE
SELECT LOWER(name) AS name_lcase FROM student -- 把字段name的值转换为小写: LOWER(SQL Server)/LCASE
SELECT LEN(name) AS len_name FROM student -- 返回name段中值的长度
可以为表名称或列名称指定别名:AS
注:
(1).SQL对大小写不敏感:SELECT与select是相同的。
(2).不同的数据库,有些语句操作用法不同。
(3).某些数据库系统要求在每条SQL语句的末端使用分号。
(4).SQL使用单引号来环绕文本值(大部分数据库系统也接受双引号)。
(5).在不同的数据库中,BETWEEN操作符会产生不同的结果:是否包括起始值和终止值,如SQL Server包括起始值和终止值。
(6).在不同的数据库中,同一种数据类型可能有不同的名称。即使名称相同,尺寸和其他细节也可能不同。