SQL 是用于访问和处理数据库的标准的计算机语言。
什么是SQL
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言
SQL DML数据操作语言和DDL数据定义语言
DML部分:
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
DDL部分:
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
创建数据库、表与插入数据
CREATE DATABASE sql-text;
CREATE TABLE `sql-text`.`text` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NULL,
`score` varchar(255) NULL,
`class` varchar(255) NULL,
PRIMARY KEY (`id`)
);
INSERT INTO text VALUES (2,'w', '33', '1');
DML
select
select语句用于查询表中数据,结果存储在一个结构表中
select 列名称 from 表名称 或者 select * from 表名称
select distinct
select distinct 用于返回唯一不同的值
select distinct 列名称 from 表名称
where
where 用于有条件的从表中选取数据
select 列名称 from 表名称 where 列 运算符 值
操作符 | 描述 |
---|---|
= | 等于 |
<> != | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
BETWEEN | 在某个范围内 |
like | 搜索某种模式 |
通配符 | 描述 |
---|---|
% | 代表零个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[!charlist] | 不在字符列中的任何单一字符 |
ps:使用单引号来环绕文本值,数值不用 | |
ps: like使用时可用通配符 | |
ps:between…and…使用时范围存在差异 |
and & or
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
order by
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
降序 DESC,升序 asc
insert into
insert into向表格中插入数据
insert into 表名称 values(值1,值2,...)
insert into table_name (列1, 列2,...) values (值1, 值2,...)
update
update 语句用于修改表中的数据
update 表名称 set 列名称 = 新值 where 列名称 = 某值
delete
delete 用于删除数据表中某行
delete from 表名称 where 列名称 = 值
top
top用于规定返回的记录的数目
select top num|percent column_name from table_name
in
IN 操作符允许我们在 WHERE 子句中规定多个值。
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
Alias(别名)
通过使用 SQL,可以为列名称和表名称指定别名(Alias)
表的 SQL Alias 语法
SELECT column_name(s)
FROM table_name
AS alias_name
列的 SQL Alias 语法
SELECT column_name AS alias_name
FROM table_name
join
inner join 与 JOIN用法一致 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
- LEFT JOIN: 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
- RIGHT JOIN: 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
union
union操作符用于合并两个或多个 SELECT 语句的结果集。
union 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
默认地,uniom 操作符选取不同的值。如果允许重复的值,请使用 union all
select into
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
###SQL约束
创建数据库、表
create database 用于创建数据库
create database database_name
create table 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
约束
- not null 约束强制列不接受NULL值,
- unique 约束唯一标识数据库表中的每条记录,和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
- primary key 约束唯一标识数据库表中的每条记录,主键必须包含唯一的值,主键列不能包含 NULL 值,每个表都应该有一个主键,并且每个表只能有一个主键
CREATE TABLE Persons
(
column1 datatype null/not null,
column2 datatype null/not null,
CONSTRAINT 主键约束名 PRIMARY KEY (column1,column2)
);
- foreign key 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY
CREATE TABLE 表名
(
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT 外键约束名 FOREIGN KEY (column1,column2,... column_n)
REFERENCES 外键依赖的表 (column1,column2,...column_n)
ON DELETE CASCADE--级联删除
);
- check
check 约束用于限制列中的值的范围 - default
default 约束用于向列中插入默认值
DDL
create index
create index 语句用于在表中创建索引,在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据
CREATE INDEX index_name
ON table_name (column_name)
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
drop
drop 语句可以轻松地删除索引、表和数据库
ALTER TABLE table_name DROP INDEX index_name 删除索引
DROP TABLE 表名称 删除表
DROP DATABASE 数据库名称 删除数据库
TRUNCATE TABLE 表名称 删除表内容 保留表结构
alter table
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 改变表中列的数据类型
auto increment
auto increment 自动地创建主键字段的值
date
函数 | 描述 |
---|---|
NOW() | 返回当前的日期和时间 |
CURDATE() | 返回当前的日期 |
CURTIME() | 返回当前的时间 |
DATE() | 提取日期或日期/时间表达式的日期部分 |
EXTRACT() | 返回日期/时间按的单独部分 |
DATE_ADD() | 给日期添加指定的时间间隔 |
DATE_SUB() | 从日期减去指定的时间间隔 |
DATEDIFF() | 返回两个日期之间的天数 |
DATE_FORMAT() | 用不同的格式显示日期/时间 |
SQL函数
SQL Aggregate 函数计算从列中取得的值,返回一个单一的值
- AVG() - 返回平均值
- COUNT() - 返回行数
- FIRST() - 返回第一个记录的值
- LAST() - 返回最后一个记录的值
- MAX() - 返回最大值
- MIN() - 返回最小值
- SUM() - 返回总和
SQL Scalar 函数基于输入值,返回一个单一的值。
- UCASE() - 将某个字段转换为大写
- LCASE() - 将某个字段转换为小写
- MID() - 从某个文本字段提取字符,MySql 中使用
- SubString(字段,1,end) - 从某个文本字段提取字符
- LEN() - 返回某个文本字段的长度
- ROUND() - 对某个数值字段进行指定小数位数的四舍五入
- NOW() - 返回当前的系统日期和时间
- FORMAT() - 格式化某个字段的显示方式
GROUP BY
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
EXISTS
EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);