sql学习


sql基础

sql是用于访问和处理数据库的标准的计算机语言。趁着假期学习总结下~

sql简介

sql可以查询、从数据库取出数据、插入、更新、删除、创建新的数据库、创建新表、创建存储过程、创建视图、设置表视图和存储过程的权限。

sql语法

一个数据库常包含一个或多个表,每个表由一个名字标识,表包含带有数据的记录。
sql对大小写不敏感

SQL SELECT语句

SELECT语句用于从一个表中选取数据,结果被存储在一个结果表中
语法:

  1. select 列名称 from 表名称
    从表名称对应的数据库表中取出列名称所对应的列的内容。
  2. 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关键字。
语法:

  1. SELECT 列名 FROM 表名称 ORDER BY 列名称
    升序排序
  2. SELECT 列名 FROM 表名称 ORDER BY 列名称 DESC
    降序排序

SQL INSERT INTO

INSERT INTO用于向表格中插入新的行。
语法:

  1. INSRET INTO 表名称 VALUES (值1,值2,...)
  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,可以为列名称和表名称指定别名。

  1. 表的SQL Alias语法:
    SELECT column_name(s)
    FROM table_name
    AS alias_name
  2. 列的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语句可用于创建表的备份原件或者对记录进行存档。
从一个表中选取数据,然后把数据插入另一个表中
语法

  1. 将所有列插入新表

SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename

  1. 把希望的列插入新表

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语句

用于在表中创建索引,在不读取整个表的情况下,使用索引可以更快的查找数据。

  1. 在表上创建一个简单的索引,允许使用重复值。

CREATE INDEX index_name
ON table_name (column_name)

  1. 在表上创建唯一的索引。

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

SQL撤销索引,表以及数据库

使用DROP语句,可以轻松的删除索引,表和数据库

  1. SQL DROP INDEX语句
    使用DROP INDEX删除表格中的索引。
  2. SQL DROPTABLE
    DROP TABLE语句用于删除表(表的结构,属性以及索引也会被删除)。
    DROP TABLE 表名称
  3. SQL DROP DATABASE
    用于删除数据库。
    DROP DATABASE 数据库名称
  4. SQL TRUCATE TABLE
    去除表中的数据,并不删除表的本身。
    TRUNCATE TABLE 表名称

SQL ALTER TABLE

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

  1. 在表中添加列

ALTER TABLE table_name
ADD column_name datatype

  1. 删除表中的列

ALTER TABLE table_name
DROP COLUMN column_name

  1. 改变表中列的数据类型

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是必需字段,用来规定格式。

posted @ 2016-10-06 20:59  yabea  阅读(955)  评论(0编辑  收藏  举报