概述
sql(Structured Query Language)属于程序语言的第四代,第四代编程语言是为特定应用设计的语言,sql是用于处理关系型数据库的语言。
数据库具体见后续文章,本文只介绍用法,即各种增删改查。
基本用法
sql的工作主要以语句完成,sql语句大小写不敏感,一个语句主要包含两部分,what(做什么)、where(在哪里做),还有可选的how(怎么做)。
操作数据
- insert into 增
- delete 删
- update 改
- select 查
增
向表中插入新数据,可以指定列名
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
也可以默认列名,但要和表中列的顺序对应
INSERT INTO table_name
VALUES (value1,value2,value3,...);
删
用于删除表中的行,没有where时会删除所有行(或者叫记录)
DELETE FROM table_name
WHERE some_column=some_value;
改
用来更新数据的行,如果少了where会更新所有记录
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
查
作为一种query language,sql主要还是在于查功能,这里介绍一下基本用法,后面章节专门介绍查询
SELECT column_name,column_name
FROM table_name;
或查询全部列
SELECT * FROM table_name;
操作其他
增删改查分别使用create,drop,alter加上对应的操作对象
- database 数据库
- table 表
- index 前两种的操作查询时,要用show+对应复数(比如 show tables),最后一种要指定所在table
查询进阶
select distinct
筛选出不同的值
SELECT DISTINCT column_name,column_name
FROM table_name;
order by
筛选的结果根据什么排序,默认升序asc
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
where
筛选出满足指定操作符结果的值
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
可用操作符包括
- =
- <> 不等于,具体的数据库一般实现了
!=
的写法 - >
- <
- >=
- <=
- between 在某个范围 添加not取反
- like 按照指定模式 添加not取反
- in 属于多个可选值 添加not取反
多个条件之间之间用and表示都满足,or表示满足一个即可。
between
可以是数值、文本或日期,上下两个范围用and连接,包括两端
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
like
可以使用通配符指定模式
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
通配符包括
- % 表示0或多个字符
- _ 表示一个字符
- [charlist]其中任一字符
- [^charlist] 或 [!charlist] 不在其中的任一字符
in
在枚举范围
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
as
显示时的列名
SELECT column_name AS alias_name
FROM table_name;
join
基于两个或多个表的共同字段将其结合,然后在结合后的表中查找,用on指定共同字段
- join或inner join 多个表都有的记录才会显示,即交集
- left join 左表中有的记录就会显示,右边没有的显示null,
- right join 右表中有的记录就会显示,左边没有的显示null
- full join 并集
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
比如
SELECT Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
union
两个选择语句的并集,选取的字段需要共同字段,默认不重复,如果重复使用union all
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
函数
对某个字段调用函数,可以进一步作为筛选条件,比如avg()表示平均数,获取某个字段的平均数
SELECT AVG(column_name) FROM table_name
作为条件,删选大于平均数的数据
SELECT site_id, count FROM access_log
WHERE count > (SELECT AVG(count) FROM access_log);
函数分为两种,Aggregate和Scalar,前者用于处理列数据返回一个值,后者用作普通函数处理每个字段,比如大小写转换
SELECT UCASE(column_name) FROM table_name;
Aggregate
- avg() - 返回平均值
- count() - 返回行数
- first() - 返回第一个记录的值
- last() - 返回最后一个记录的值
- max() - 返回最大值
- min() - 返回最小值
- sum() - 返回总和
Scalar
- ucase() - 将某个字段转换为大写
- lcase() - 将某个字段转换为小写
- mid() - 从某个文本字段提取字符,MySql 中使用
- substring(字段,1,end) - 从某个文本字段提取字符
- len() - 返回某个文本字段的长度
- round() - 对某个数值字段进行指定小数位数的四舍五入
- now() - 返回当前的系统日期和时间
- format() - 格式化某个字段的显示方式
完结