简介
SQL是Structured Query Language的缩写,翻译过来就是结构化查询语言。SQL是用于管理关系型数据库而设计的语言。关系型数据库是值将数据组织在一张张表中形式的数据库。常见的关系型数据有:SQLite,MYSQL,Oracle DB,SQL Server,PostgreSQL。与关系型数据库对应的就是非关系型数据库(NoSQL)了,常见的有:Redis,MongoDB,CouchDB,LevelDB
关系型数据库与非关系型数据库区别,引用一段来之知乎的回答:
1.实质。 非关系型数据库的实质:非关系型数据库产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能。
2.价格。目前基本上大部分主流的非关系型数据库都是免费的。而比较有名气的关系型数据库,比如Oracle、DB2、MSSQL是收费的。虽然Mysql免费,但它需要做很多工作才能正式用于生产。
3.功能。 实际开发中,有很多业务需求,其实并不需要完整的关系型数据库功能,非关系型数据库的功能就足够使用了。这种情况下,使用性能更高、成本更低的非关系型数据库当然是更明智的选择。
作者:pig pig
链接:https://www.zhihu.com/question/24225007/answer/32091571
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
SQL操作
为了便于描述假设存在一个表,该表的名称是celebs,该表有四列。在SQL中表是由行和列组成,但是表按照列名进行分类。
id | name | age | twitter_handle |
---|---|---|---|
INTEGER | TEXT | INTEGER | TEXT |
SELECT
毋庸置疑,SELECT是SQL里最常用的语句了,SELECT用于从表中选取列,结果被存储在一个结果集中。
//选择所有列
SELECT * FROM celebs;
//选择name这一列
SELECT name FROM celebs;
CREATE TABLE
CREATE TABLE用来创建一个表
//创建一个表,表的名称为table_name,该表有三列,列名分别为column_1,column_2,column_3.列中的数据类型分别为整形,文本,文本
CREATE TABLE table_name ( column_1 INTEGER, column_2 TEXT, column_3 TEXT );
INSERT INTO
INSERT INTO用于向列中插入值
//分别向列id, name, age中插入 1, 'Justin Bieber', 21
INSERT INTO celebs (id, name, age) VALUES (1, 'Justin Bieber', 21);
UPDATE
用于修改表中的数据
//语法
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
//修改id=1这一行的age列的数据为22
UPDATE celebs SET age = 22 WHERE id = 1;
ALTER TABLE
修改表,用于增加,修改,删除列
//ADD COLUMN添加一个列
ALTER TABLE celebs ADD COLUMN twitter_handle TEXT;
//DROP COLUMN删除一个列 ALTER TABLE celebs DROP COLUMN twitter_handle;
DELETE
删除表中的行
//IS NULL表示值是NULL或者不存在,删除twitter_handle列中值不存在的行,WHERE后面会介绍
DELETE FROM celebs WHERE twitter_handle IS NULL;
SQL查询
为了便于表达,假设存在一张表,该表的名称为movies。该表有五列,分别是id,name, genre,year,imdb_rating,统计ID,电影名称,电影类型, 发行年份,评分。
DISTINCT
过滤重复的数据
SELECT DISTINCT * FROM movies;
WHERE
通过各种条件定位到具体的数据
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
//统计评分高于8的电影
SELECT * FROM movies WHERE imdb_rating > 8;
LIKE
模糊匹配
//_通配一个字符
SELECT * FROM movies WHERE name LIKE 'Se_en';
//%通配任意多个字符
SELECT * FROM movies WHERE name LIKE '%man%';
BETWEEN
匹配一个范围
//查到year范围在1990到2000之间的电影
SELECT * FROM movies WHERE year BETWEEN 1990 and 2000;
AND
逻辑与
SELECT * FROM movies WHERE year BETWEEN 1990 and 2000 and genre = 'comedy';
OR
逻辑或
SELECT * FROM movies WHERE genre = 'comedy' AND year < 1980;
ORDER BY
h依据某一列进行排序,ASC是顺序排序,DESC是逆序排序。
SELECT * FROM movies ORDER BY year ASC;
SQL计算
为了便于表达,假设存在一张表,该表的名称为fake_apps.该表有五列,分别是:
列名 | 值类型 |
---|---|
id | INTEGER |
name | TEXT |
category | TEXT |
downloads | INTEGER |
price | REAL |
COUNT()
COUNT()是最快的方式,统计一张表总共的行数。COUNT()函数的参数是一个列的名称,统计整个表所有的行数时,采用通配符*
;
//统计整个表的行数
SELECT COUNT(*) FROM fake_apps; //统计price为0的行数 SELECT COUNT(*) FROM fake_apps WHERE price = 0;
GROUP BY
GROUP BY <列名> 将一列中相同值的列分成一组
//按照价格进行分组,并统计每组元素的个数
SELECT price, COUNT(*) FROM fake_apps GROUP BY price; //按照价格分组,但是只将downloads大于20000的作为分组对象,最后统计每组的数量 SELECT price, COUNT(*) FROM fake_apps WHERE downloads > 20000 GROUP BY price;
SUM()
SQL通过SUM()可以很容易统计一列的和
//计算downloads一列的和
SELECT SUM(downloads) FROM fake_apps;
//通过catagory进行分组,计算每组downloads的和
SELECT category, SUM(downloads) FROM fake_apps GROUP BY category;
MAX()
MAX()函数可以找到一列中的最大值
SELECT name, MAX(downloads) FROM fake_apps;
//按category进行分组,找到没组中的最大值
SELECT name, category, MAX(downloads) FROM fake_apps GROUP BY category;
MIN()
MIN()函数可以找到一列中最小的值,用法与MAX()相同
AVG()
AVG()函数计算一列的平均值,用法与MAX()相同
//计算同一种价格的平均下载量
SELECT price, AVG(downloads) FROM fake_apps GROUP BY price;
ROUND()
设定数值到指定的精度
//设定计算的平均值精度精确到小数点后两位
SELECT price, ROUND(AVG(downloads), 2) FROM fake_apps GROUP BY price;
多个表操作
PRIMARY KEY
在使用CREATE TABLE时为id添加PRIMARY KEY,PRIMARY KEY是一张表中每一行独一无二的标识,该表将id作为主键。通过主键将多个表联系起来。
CREATE TABLE artists(id INTEGER PRIMARY KEY, name TEXT)
本文是在学习SQL语言时做下的简单笔记,学习的网站是:
https://www.codecademy.com/learn/learn-sql可以可视化学习和练习SQL语言,基础部分是免费的。
另外还有个网址总结了SQL语法便于速查,也记录在这:
http://www.w3school.com.cn/sql/sql_intro.asp