SQL基础语法

简介

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中表是由行和列组成,但是表按照列名进行分类。

idnameagetwitter_handle
INTEGERTEXTINTEGERTEXT

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.该表有五列,分别是:

列名值类型
idINTEGER
nameTEXT
categoryTEXT
downloadsINTEGER
priceREAL

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;

《SQL基础语法》

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

    原文作者:SQL
    原文地址: https://blog.csdn.net/shanghairuoxiao/article/details/75249317
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞