刷题或者练习sql的网站:https://leetcode-cn.com/problemset/database/
sql学习教程:
http://www.w3school.com.cn/sql/index.asp
https://www.runoob.com/sql/sql-tutorial.html
sql几个要点
SQL 对大小写不敏感!
某些数据库系统要求在每条 SQL 命令的末端使用分号。
我这里总结的是mysql,其他数据库可能会有差异
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
DML:
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据
DDL:
SQL 中最重要的 DDL 语句:
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
SQL常用数据类型:
数据类型 |
描述 |
|
仅容纳整数。在括号内规定数字的最大位数。 |
|
容纳带有小数的数字。 "size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。 |
char(size) |
容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。 在括号中规定字符串的长度。 |
varchar(size) |
容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。 在括号中规定字符串的最大长度。 |
date(yyyymmdd) |
容纳日期。 |
CREATE DATABASE database-name //创建数据库
drop database dbname //删除数据库
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)//创建表
drop table tabname //删除表
Alter table tab-name add column col-name type //新加一列
Alter table tab-name drop 字段名 //删除一列
ALTER TABLE 旧表名 rename to 新表名;//修改表名
ALTER table student change 旧字段 新字段 数据类型;//修改字段名
//增删改查
insert into tab-name(field1,field2) values(value1,value2) //增
delete from table1 where 范围//删除数据
update table1 set field1=value1 where 范围//更新
//查
select * from tab-name where 范围 //查询数据
where:
条件表达式:where grade>10;name='mike'
in关键字: where name [not] in('tom','kik','bvb')
between and关键字: where id [not] between 1 and 100
distinct:
select distinct age ,gender from stu//年龄和性别都不同的学生
//可以作用于多个字段
like:
where name [not] like '_123%'
%匹配0或多个
_匹配一个
\转义字符来匹配% _
and:
多条件查询
or:
满足一个条件即可查询
and优先级比or高
sql最重要和最难的还是查询语句,所以下面都是围绕查询来写的
高级查询:
聚合函数
count(*)
sum(字段名)
avg(字段名)
max(字段名)
min(字段名)
等等(具体可以查相关文档)
查询结果排序
order by 字段名1[desc][asc] 字段名2[desc][asc]
分组查询
group by 字段名//将字段分组
通常和聚合函数一起,例如count
与having一起使用
having后面可接聚合函数,where不能
例子:SELECT sum(age),bb from `student` GROUP BY bb HAVING SUM(age)>20;
limit限制查询结果数量
limit [offset],记录数量
例子: select * from student limit 1,2//从第1条数据(默认是0开始)开始显示两条数据
函数
if() ifnull() md5() ,concat() , length() sort() 等等(具体可以查相关文档)
为表和字段取别名
表名 as 别名
字段名 as 别名
多表查询
table1 cross join table2 //笛卡儿积
inner jion=join //内连接
外连接
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
复合查询:
in()
exists()
any()
all()
多表查询:看图,加具体的练习就懂了,这个其实不难的
具体操作一下就懂了
sql语句的执行顺序以及流程:
这里是个人认为在掌握基本语法后最重要的一点了
SELECT DISTINCT
FROM
JOIN
ON
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
如果你知道每个关键字的意思,作用,如果你还用过的话,那再好不过了。但是,你知道这些语句,它们的执行顺序你清楚么?如果你非常清楚,你就没有必要再浪费时间继续阅读了;如果你不清楚,非常好,你应该庆幸你阅读到了这么好的一篇文章。
http://www.360doc.com/content/18/0716/00/5758241_770676287.shtml
这篇文章写的很好,我觉得有必要看看
自定义函数分为二种:一种是标量值函数,另一种是表格值函数
(这个我自己用的也比较少,但是记一下吧)
1 标量值函数 :返回一个标量值
语法:
Create function 函数名(参数)
Returns 返回值数据类型
as
begin
SQL语句(必须有return 变量或值)
End
例子:
2 表格值函数 ,表格值函数有二种(内联表格值函数,多句表格值函数)
语法:
create function 函数名(参数)
returns table
as
return(一条SQL语句)
其他用法:
case when
例子:
最后:
这些都是个人这几天又简单复习了一遍数据库,以前没总结全忘了,现在总结一下,可能还会有更新
上面只是数据库知识的冰山一角,还有很多方面没有涉及到,如果有错误,请不吝啬你的指出,谢谢啦
共勉