SQL

345 阅读5分钟

什么是sql

Structured Query Language:结构化查询语言,指结构化查询语言,全称是Structyred Query Language。 SQL让你可以访问和处理数据库 SQL是一种ANSI(美国国家标准化组织)标准的计算机语言

SQL SELECT语句

SELECT 语句用于从数据库中选取数据, 结果被存储在一个结果表中,称为结果集 SQL SELECT语法

SELECT column_name,column_name
FROM table_name
OR
SELECT * FROM table_name

SELECT Column实例

从'Websites'表中选取'name'和'country'列

SELECT name,country FROM Websites

输出结果是

SELECT * 实例

SQL语句从'Websites'表中选取所有列

SELECT * FROM Websites

输出结果为

SELECT DISTINCT语句

SELECT DISTINCT语句用于返回唯一不同的值

SELECT DISTINCT column_name,column_name
FROM table_name

SELECT DISTINCT实例

SELECT DISTINCT country FROM Websites

输出结果

SQL WHERE子句

WHERE子句用于过滤记录,提取哪些满足指定条件的记录

SELECT column_name.column_name
FROM table_name
WHERE column_name operator value;

WHERE子句实例

从'Websites'表中选取所有国家为'CN'的所有网站

SELECT * FROM Websites WHERE country='CN'

输出结果为

文本字段和数值字段

SQL使用单引号来环绕文本值(大部分数据库系统也接受双引号) 在上个实例中'CN'文本字段使用了单引号。如果是数值字段不要使用引号

SELECT * FROM Websites WHERE id=1

WHERE子句中的运算符

WHERE筛选实例

//搜索empno等于700的数据
SELECT * FROM Emp WHERE empno=700
//搜索匹配xx的字符串
SELECT * FROM Emp WHERE empno='xx'
//搜索emp表中sal列中大于2000小于3000的值
OR
//满足其中一个条件的值
SELECT * FROM emp WHERE sal >2000 and sal < 3000
OR
SELECT * FROM emp WHERE sal > 2000 OR comm > 500
//查询emp表中SAL小于等于500的值
SELECT * FROM emp WHERE not sal > 500
//逻辑运算优先级
() not and or

特殊条件

1.空值判断:is null

//查询emp表中的comm列中的空值
SELECT * FROM emp WHERE comm is null

2.between and (在之间的值)

//查询emp表中的sal列中大于15003000的值
//注意:大于等于1500和小于等于3000,下限在前,上线在后。
SELECT * FROM emp WHERE sal between 1500 and 3000

3.In

//查询EMp表中sal列中等于5000300015000的值
SELECT * FROM emp WHERE sal in(5000,3000,15000);

4.like like模糊查询

//查询emp中ename列中有M的值,M为要查询内容中的模糊信息
SELECT * FROM emp WHERE ename like 'M%';
  • % :表示多个字值,——下划线表示一个字符
  • M% :为能配符,正则表达式,表示的意思为模糊查询信息为M开头的
  • %M% :表示查询包含M的所有内容
  • %M_ :表示查询以M在倒数第二位的所有内容

结合and&OR

将and和or结合起来使用,(使用圆括号来组成复杂的表达式)

SELECT * FROM Websites WHERE alexa > 15 AND (country='CN' OR conutey='USA';

输出结果

SQL ORDER BY关键子

使用ORDER BY对于结果集进行排序

SELECT column_name,column_name FROM table_name ORDER BY column_name.cloumn_name ASC|DESC

ORDER BY实例

//将表中数按照alexa排序
SELECT * FROM Websites ORDER BY alexa

输出结果

ORDER BY DESC降序排列

SELECT * FROM Websites ORDER BY alexa DESC

ORDER BY多列

按照country和alexa列排序

SELECT * FROM Websites ORDER BY conuntry,alexa;

输出结果

INSERT INTO新增插入

INSERT INTO语句用于插入新的记录 INSERT INTO语句有两种编写形式 第一种只需要指定插入数据的列名,只需要提供被插入的值即可

INSERT INTO table_name VALUES (VALUE1,VALUE2,VALUE3,...)

第二种形式需要指定列名以及被插入的值

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...)

INSERT INTO实例

INSERT INTO Websites (name,url,alexa,country) VALUES ('百度','https://baidu.com/', '4','CN')
//一般都是先执行以上语句,再读取表

输出结果

在指定列插入数据

INSERT INTO Websiters (name,url,country) VALUES ('stackoverflow','https://stackoverflow.com/','IND')

输出结果 值得注意的是,每次插入数据的时候并未提供新的id数字,这是因为id列是自动更新的,表中的每条记录都有一个唯一的数字

SQL UPDATE语句

UPDATE语句用于更新表中的记录

UPDATE table_name 
SET column1=value1,column2=value2,...
WHERE some_column=some_value

UPDATE实例

//将菜鸟教程的alexa变为5000,country改为USA
UPDATE Websites
SET alexa='5000',country='USA'
WHERE name='菜鸟教程'

输出结果 UPDATE语句尽量和WHERE语句配合使用,如果上述例子未使用WHERE语句,会将表中的所有alexa和conuntry变为5000和USA

//通过设置参数可以强制在使用update语句中携带where语句,负责就会爆粗
sql_safe_updates=1

DELETE语句

DELETE语句用于删除表中的记录

DELETE FROM table_name 
WHERE some_column-some_value

DELETE语句实例

//在表中定位到'Facebook'且国家为'USA'并删除
DELETE FROM Websites
WHERE name='Facebook' AND country='USA'

输出结果

INNER JOIN 表连接

表的链接分好几种类型

数据库链接参考阮一峰文档

  • 内链接(inner join)

返回两张表匹配的记录

  • 左连接(left join)

返回两张表匹配的记录以及A表中其他的记录

  • 右链接(right join)

返回两张表匹配的记录以及B表中的其他记录

  • 全链接(full join)

返回两张表匹配的记录以及A和B表中格子其他的记录

SELECT * FROM Websites
INNER JOIN B ON Websites.name=B.name  //匹配内容
//OR
LEFT JOIN B ON Websites.name=B.name  //匹配和A表其余
//OR
RIGHT JOIN B ON Websites.name=B.name  //匹配和B表其余
//OR
FULL JOIN B ON Websites.name=B.name //匹配加全部