共计 2415 个字符,预计需要花费 7 分钟才能阅读完成。
因为公司我的项目起因,在生产我的项目中用到了 SQL 语句,只管只是一些简略的查问语句,也算是本人前端生涯的技能拓展,所以专门对于 SQL 语句,作了一些根底练习。网上学习 SQL 语句教程十分的多,学习材料百度即可。作为一个 SQL 菜鸟,在这里分享,是为了坚固学习,心愿能够帮忙到大家。
SQL 根底
SQL 是用于拜访和解决数据库的规范的计算机语言。目前我接触的数据库有:MySQL、PostgreSQL、MongoDB,前两个是关系型数据库,后一个是非关系型数据库。它们给我的直观区别是:关系型反对 SQL 语句,非关系型不反对。MySQL
、PostgreSQL
都是反对 SQL 语句的,这里须要一点前提常识。
- 数据库: 数据库是一些关联表的汇合
- 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简略的电子表格
- 列: 一列(数据元素) 蕴含了雷同类型的数据, 例如邮政编码的数据
- 行:一行(= 元组,或记录)是一组相干的数据,例如一条用户订阅的数据
- 主键:主键是惟一的。一个数据表中只能蕴含一个主键。你能够应用主键来查问数据,例如 id
SQL 查问
1. 如何进行数据表的查问?
// 获取数据表中具体那几列的数据
select column_name1, column_name2 from PERSONS
// 获取数据表全副的数据,* 示意所有
select * from PERSONS
这个的 PERSONS
就是数据表,column_name1
、column_name2
列的名称。
2. 如何进行数据表的过滤查问?
// 查问合乎 name 为 liuheng 的数据
select * from PERSONS where name='liuheng';
// 查问合乎 name 为 liuheng 和 liuheng1 的数据
select * from PERSONS where name='liuheng' and name='liuheng1';
// 查问合乎 age 大于 20 的数据
select * from PERSONS where age > 20;
// 查问合乎 age 等于 20,30 的数据
select * from PERSONS where age in (20, 30);
// 查问合乎 name 首字母为 'l' 的数据
select * from PERSONS where name like 'l%';
// 查问合乎 name 尾字母为 '1' 的数据
select * from PERSONS where name like '%1';
where
子句用于提取那些满足指定条件的记录。like
操作符用于在 WHERE 子句中搜寻列中的指定模式。in
操作符容许在 WHERE 子句中规定多个值。
3. 如何多表查问数据?
// 查问 PERSONS 和 DOGS 两张表的全副数据
select * from PERSONS, DOGS;
select p.id, p.name, p.age, d.owner dog_name from PERSONS p, DOGS d;
以上 sql 语句即可进行多表查问,这样的多表查问又称笛卡尔查问,应用笛卡尔查问时要十分小心,因为后果集是指标表的行数乘积,对两个各自有 100 行记录的表进行笛卡尔查问将返回 1 万条记录,对两个各自有 1 万行记录的表进行笛卡尔查问将返回 1 亿条记录。(审慎应用)
即便配合 where 语句也要慎用,因为 FROM X,Y 是先做笛卡尔乘积,WHERE 再从乘积后的表中选出指定列。
4. 有更好的多表查询方法嘛?—— 连贯查问
连贯查问分为三种:内查问 INNER JOIN、左查问 LEFT OUTER JOIN、右查问 RIGHT OUTER JOIN;
内查问 语句如下:
// 内查问
select p.id, p.name, p.gender, p.age, d.name dog_name
from PERSONS p
inner join DOGS d
on s.name = d.owner;
- 确定主表,应用 from < 表 1 > 的语法(这里的表 1 即能够是特定的表,也能够是(select * from ROBOTS;) 这样的语句);
- 确定须要连贯的表,应用 inner join < 表 2 > 的语法;
- 确定连贯条件,应用 ON;可选。可选加上 where 子句、order by 等子句;
内查问次要用来查问两表都存在的记录:
5. 左查问和右查问?
左查问 语句如下:
// 左查问
select p.id, p.name, p.gender, p.age, d.name dog_name
from PERSONS p
left join DOGS d
on s.name = d.owner;
left join
等价于left outer join
,左查问是选出左表存在的记录:
右查问 语句如下:
// 右查问
select p.id, p.name, p.gender, p.age, d.name dog_name
from PERSONS p
right join DOGS d
on s.name = d.owner;
right join
等价于right outer join
,右查问是选出左表存在的记录:
6. SQL 语句反对函数嘛?
sql 是有内建函数,sql 的内建函数能够极大便当开发者。
// 返回指定列的最大值
select MAX(age) from PERSONS;
// 返回表中的记录数
select COUNT(*) from PERSONS;
// 返回文本字段中值的长度
select LEN(name) from PERSONS;
// 返回指定的列中第一个记录的值
select FIRST(*) from PERSONS;
以上只是 sql 内建函数中的几个罕用函数,还有更多的函数没有列出,例如:LAST、MIN、SUM、AVG 等。
7. 如何更新表数据或删除表数据?
// 更新表数据
update table_name set col1=values1, clo2=value2 where col3=value
// 删除表数据
delete from table_name where col=value;
倡议对于数据表中的必要数据的删除只是标记删除,保留数据记录。
这次分享到此为止,因为本人也是菜鸟的起因,会继续学习 sql,后续也会持续分享相干学习。