sql学习
sql基础
sql是用于访问和处理数据库的标准的计算机语言。趁着假期学习总结下~
sql简介
sql可以查询、从数据库取出数据、插入、更新、删除、创建新的数据库、创建新表、创建存储过程、创建视图、设置表视图和存储过程的权限。
sql语法
一个数据库常包含一个或多个表,每个表由一个名字标识,表包含带有数据的记录。
sql对大小写不敏感
SQL SELECT语句
SELECT语句用于从一个表中选取数据,结果被存储在一个结果表中
语法:
- select 列名称 from 表名称
从表名称对应的数据库表中取出列名称所对应的列的内容。 - select * from 表名称
从表名称所对应的数据库表中取出所有列的内容。
SQL SELECT DISTINCT语句
关键词DISTINCT用于返回唯一不同的值
语法:SELECT DISTINCT 列名称 FORM 表名称
SQL WHERE子句
where子句同于规定选择的标准,如果需要有条件的从表中选取数据,可将where子句添加到select语句中
语法:SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
可在where子句中使用的运算符:
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于(用于某些版本的SQL中) |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
一般的条件值周围都是用的是单引号,SQL使用单引号来环绕文本值,如果是数值,不需要使用引号。 |
SQL AND & OR 运算符
AND和or用于基于一个以上的条件对记录进行过滤 在一个WHERE子句中将两个或多个条件结合起来。
也可以将AND和OR使用圆括号结合起来组成复杂表达式。
SQL ORDER BY子句
ORDER BY子句用于根据指定的列队结果集进行排序,默认按照升序对记录进行排序,如果要按照降序对记录进行排序,使用DESC关键字。
语法:
- SELECT 列名 FROM 表名称 ORDER BY 列名称
升序排序 - SELECT 列名 FROM 表名称 ORDER BY 列名称 DESC
降序排序
SQL INSERT INTO
INSERT INTO用于向表格中插入新的行。
语法:
- INSRET INTO 表名称 VALUES (值1,值2,...)
- INSERT INTO table_name (列1,列2...)VALUES (值1,值2,..)
SQL UPDATE语句
Update用于修改表中的数据
语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
SQL DELETE语句
DELETE用于删除表中的行
语法: DELETE FROM 表名称 WHERE 列名称 = 值
SQL高级教程
SQL TOP子句
TOP子句用于规定要返回的记录的数目,这条语句对于拥有数千条记录的大型表而言,是很有用的。
不同数据库所支持的TOP子句是不一样的。
SQL Server:
SELECT TOP number|percent column_name(s)
FROM table_name
Mysql:
SELECT column_name(s)
FROM table_name
LIMIT number
Oracle:
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number
SQL LIKE操作符
LIKE用于在WHERE子句中搜素列中的指定模式
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
其中,通过NOT关键字,也可以反向匹配。
SQL通配符
在搜索数据库时,可以使用SQL通配符,有点类似于正则表达式。
SQL通配符通常和LIKE运算符一起使用。
在SQL中,可使用以下通配符:
通配符 | 描述 |
---|---|
% | 替代一个或多个字符 |
_ | 仅代替一个字符 |
[charlist} | 字符列中的任何单一字符 |
[^charlist]或者[!charlist] | 不在字符列中的任何单一字符 |
SQL IN操作符
IN操作符允许我们在WHERE子句中规定多个值。
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name IN(value1,value2,...)
SQL BETWEEN操作符
操作符BETWEEN会选取介于两个值之间的数据范围。
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
如果要显示范围之外的人,可以使用NOT操作符。
SQL Alias(别名)
通过使用SQL,可以为列名称和表名称指定别名。
- 表的SQL Alias语法:
SELECT column_name(s)
FROM table_name
AS alias_name - 列的SQL Alias语法:
SELECT column_name AS alias_name
FROM table_name
SQL JOIN
SQL join用于根据两个或多个表中的列之间的关系,从这些表中查询数据。也就是将通过主外键连接的表中的列打印出来。
Join和Key
有时为了得到完整的结果,需要从两个或更多的表中获取结果,就需要执行join。
SQL INNER JOIN关键字
在表中至少有一个匹配时,INNER JOIN关键字返回行。
SQL LEFT JOIN关键字
LEFT JOIN会从左表那里返回所有行,即使在右表中没有匹配的行。比如我们想要显示如果存在的东西。
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name = table_name2.column_name
SQL RIGHT JOIN关键字
返回右表中所有的行,即使在左表中没有匹配的行。
语法:
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
SQL FULL JOIN关键字、
只要其中的某个表存在匹配,FULL JOIN就会返回行。如果那些行没有匹配,同样会列出。
语法:
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
SQL UNION和UNION ALL操作符
UNION用于合并两个或多个SELECT语句的结果集。
UNION内部的SELECT语句必须拥有相同数量的列。每一列都必须有相似的数据类型。
语法:
SELECT column_name(s) FROM table_name1
UNION(all)
SELECT column_name(s) FROM table_name2
其中,union操作符是选取不同的值,而union all是允许重复的值。
SQL SELECT INTO语句
SQL SELECT INTO语句可用于创建表的备份原件或者对记录进行存档。
从一个表中选取数据,然后把数据插入另一个表中
语法
- 将所有列插入新表
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
- 把希望的列插入新表
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
IN可用于向另一个数据库中拷贝表。
SQL CREATE DATABASE
用于创建数据库:CREATE DATABASE database_name
CREATE TABLE
用于创建数据库中的表。
语法:
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
SQL中常用的数据类型如下:
数据类型 | 描述 |
---|---|
integer(),int(),smallint(),tinyint(size) | 仅容纳整数,括号内规定数字的最大位数 |
decimal(size,d),numeric() | 容纳带小数的数字,其中size为规定数字的最大位数,d为规定小数点右侧的最大位数 |
char(size) | 容纳固定长度的字符串 |
varchar(size) | 可变长度的字符串 |
data() | 容纳日期 |
SQL约束
用于限制加入表的数据的类型。
常见的约束有:
约束 |
---|
NOT NULL |
UNIQUE |
PRIMARY KEY |
FOREIGN KEY |
CHECK |
DEFAULT |
NOT NULL
如果不向字段添加值,就无法插入新纪录或者更新记录。
UNIQUE
UNIQUE和主见约束均为列或者列集合提供了唯一性的保证,每个表可以有多个的UNIQUE约束,但是每个表只能有一个主键约束。
PRIMARY KEY约束
主键约束唯一标识数据库表中的每条记录。其中,主键必须包含唯一的值,不能包含NULL值,每个表都应该有一个主键,并且每个表只能有一个主键。
FOREIGN KEY约束
一个表中的FOREIGN KEY指向另一个表中的PRIMARY KEY
CHECK
限制列中的值的范围。如果对单个列定义CHECK约束,则该列值允许特定的值,如果对一个表定义CHECK约束,那么此约束会在特定的列中对值进行限制。
DEFAULT
用于向列中插入默认值,如果没有规定其他的值,就添加默认值。
SQL CREATE INDEX语句
用于在表中创建索引,在不读取整个表的情况下,使用索引可以更快的查找数据。
- 在表上创建一个简单的索引,允许使用重复值。
CREATE INDEX index_name
ON table_name (column_name)
- 在表上创建唯一的索引。
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
SQL撤销索引,表以及数据库
使用DROP语句,可以轻松的删除索引,表和数据库
- SQL DROP INDEX语句
使用DROP INDEX删除表格中的索引。 - SQL DROPTABLE
DROP TABLE语句用于删除表(表的结构,属性以及索引也会被删除)。
DROP TABLE 表名称 - SQL DROP DATABASE
用于删除数据库。
DROP DATABASE 数据库名称 - SQL TRUCATE TABLE
去除表中的数据,并不删除表的本身。
TRUNCATE TABLE 表名称
SQL ALTER TABLE
用于在已有的表中添加、修改或者删除列。
- 在表中添加列
ALTER TABLE table_name
ADD column_name datatype
- 删除表中的列
ALTER TABLE table_name
DROP COLUMN column_name
- 改变表中列的数据类型
ALTER TABLE table_name
ALTER COLUMN column_name datatype
SQL AUTO INCREMENT
Auto-increment会在新纪录插入表中时生成一个唯一的数字。
SQL VIEW
视图是基于SQL语句的结果集的可视化的表。
语法:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
视图总是显示最近的数据。
SQL Date函数
处理日期时,为了确保所插入的日期的格式,也就是与数据库中日期格式相匹配。
重要的內建日期函数:
MySQL Date函数
函数 | 描述 |
---|---|
now() | 返回当前的日期和时间 |
CURDATE() | 返回当前的日期 |
CURTIME() | 返回当前的时间 |
DATE() | 提取日期 |
EXTRACT() | 返回日期 |
DATE ADD() | 给日期添加指定的时间间隔 |
DATE SUB() | 从日期减去指定的时间间隔 |
DATEDIFF() | 返回两个日期之间的天数 |
DATE FORMAT() | 用不同格式显示日期/时间 |
SQL SERVER Date函数
函数 | 描述 |
---|---|
GETDATE() | 返回当前日期和时间 |
DATEPART() | 返回日期或之间的单独部分 |
DATEADD() | 在日期中添加或减去指定的时间间隔 |
DATEDIFF() | 返回两个日期之间的时间 |
CONVERT() | 用不同的格式显示日期或时间 |
SQL NULL值
NULL值是遗漏的未知数据,默认的,表的列可以存放NULL值。使用IS NULL来查找NULL值,使用IS NOT NULL读取不带有NULL值的操作符。
SQL函数
SQL拥有很多可用于计数和计算的内建函数。
内奸函数的语法:SELECT function(列) FROM 表
SQL AVG
AVG函数返回数值列的平均值,NULL值不包括在计算中。
SELECT AVG(column_name) FROM table_name
count()
返回指定列的值的数目
FIRST()
返回指定的字段中第一个记录的值。
可在排序之后根据排序结果找到最值。
LAST()
和FIRST()类似,该函数返回的是最后一个记录的值。
MAX()和MIN()
返回一列中的最大值和最小值,NULL值不包括在计算中,可以用于文本列,获得按照字母顺序排列的最高或最低值。
SUM()函数
返回数值列的总数。
GROUP BY()
用于结合合计函数,根据一个或多个列对结果集进行分组。
HAVING子句
当WHERE关键字无法和合计函数一起使用时,使用HAVING子句。
ucase()
该函数将字段的值转换为大写。
SELECT UCASE(column_name) FROM table_name
LCASE()
将字段的值转换为小写。
MID()
用于从文本字段中提取字符。
语法:
SELECT MID(column_name,start[,length]) FROM table_name
其中,各参数代表的意义如下:
参数 | 描述 |
---|---|
column_name | 必需。指的是要提取字符的字段 |
start | 必需,规定开始位置 |
length | 可选,要返回的字符数,如果省略的话,则返回剩余文本 |
LEN()
LEN函数返回文本字段中值的长度。
语法:
SELECT LEN(column_name) FROM table_name
ROUND()
该函数用于把数值字段舍入为指定的小数位数。
语法:
SELECT ROUND(column_name,decimals) FROM table_name
NOW()
NOW函数返回当前的日期和时间。
语法:
SELECT NOW() FROM table_name
FORMAT()
FORMAT()函数用于对字段的显示进行格式化。
语法:
SELECT FORMAT(column_name,format) FROM table_name
其中,format是必需字段,用来规定格式。