SQL语句

SQL简介

什么是 SQL?

  • SQL 指结构化查询语言
  • 使我们有能力访问数据库
  • SQL 是一种 ANSI 的标准计算机语言(ANSI,美国国家标准化组织)

SQL 能做什么?

  • SQL 面向数据库执行查询
  • SQL 可从数据库取回数据
  • SQL 可在数据库中插入新的纪录
  • SQL 可更新数据库中的数据
  • SQL 可从数据库删除记录
  • SQL 可创建新数据库
  • SQL 可在数据库中创建新表
  • SQL 可在数据库中创建存储过程
  • SQL 可在数据库中创建视图
  • SQL 可以设置表、存储过程和视图的权限

结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

SQL 语法

一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带有数据的记录(行)。
下面的例子是一个名为 "user" 的表:

SQL语句_第1张图片

上面的表包含四条记录(每一条对应一个人)和六个列(id、姓名、性别、年龄、邮箱、qq)。

需要在数据库上执行的大部分工作都由 SQL 语句完成。 下面的语句从表中选取 name 列的数据:

SELECT name FROM user(作用:查询“user”表里“name”这列的所有内容)

返回结果集如下:

SQL语句_第2张图片

重要事项 一定要记住,SQL语句对大小写不敏感!

SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

  • SELECT - 从数据库表中获取数据
  • UPDATE - 更新数据库表中的数据
  • DELETE - 从数据库表中删除数据
  • INSERT INTO - 向数据库表中插入数据

SQL SELECT 语句

SELECT 语句用于从表中选取数据,结果被存储在一个结果表中(称为结果集)。
SQL SELECT 语法
SELECT 列名称 FROM 表名称或者SELECT * FROM 表名称(星号(*)是选取所有列的符号)
注意:SQL 语句对大小写不敏感。SELECT 等效于 select。

//获取user表中name列和email数据列
SELECT name,email FROM user

SQL SELECT DISTINCT 语句

在表中可能会包含重复值。这并不成问题,不过,有时希望仅仅列出不同(distinct)的值,关键词 DISTINCT 用于返回唯一不同的值。
语法: SELECT DISTINCT 列名称 FROM 表名称

SELECT distinct age FROM user

SQL WHERE 子句

WHERE 子句用于规定选择的标准。 WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
语法:SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
下面的运算符可在 WHERE 子句中使用:

SQL语句_第3张图片

注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=

//查询年龄在28周岁的人员信息
SELECT * FROM user WHERE age=28
//查询年龄不等于28的人员信息
SELECT * FROM user WHERE age<>28
//查询年龄大于28的人员信息
SELECT * FROM user WHERE age>28
//查询年龄小于28的人员信息
SELECT * FROM user WHERE age<28
//查询年龄在28以上48以下的人员信息
SELECT * FROM user WHERE age BETWEEN 28 AND 48
//模糊匹配查询
SELECT * FROM user WHERE email LIKE '%qq%'

引号的使用

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,建议不要使用引号。
文本值:
这是正确的:

SELECT * FROM user WHERE name='霍建华'

这是错误的:

SELECT * FROM user WHERE name=霍建华

SQL AND & OR 运算符

AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤。AND 和 OR 运算符 AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

//两个条件同时成立
SELECT * FROM user WHERE age=28 AND sex=2
//成立其中一个条件
SELECT * FROM user WHERE age=28 OR age=38

SQL ORDER BY 子句

ORDER BY 语句用于对结果集进行排序。
ORDER BY 语句用于根据指定的列对结果集进行排序。 如果希望按照降序对记录进行排序,可以使用 DESC 关键字。 如果希望按照升序对记录进行排序,可以使用 ASC 关键字。

//升序
SELECT * FROM user ORDER BY age ASC
//降序
SELECT * FROM user ORDER BY age DESC

SQL GROUP BY 字句

GROUP BY 语句用于对结果集进行分组。
“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

//Group By
SELECT * FROM user GROUP BY age
//Group By 和 Order By
SELECT * FROM newtable GROUP BY age ORDER BY age ASC

SQL INSERT INTO 语句

INSERT INTO 语句用于向数据表中插入新的行。
语法:INSERT INTO 表名(列名1,列名2......) VALUES(值1,值2,....)

INSERT INTO user(name,sex,age,email,qq) values('李易峰',1,18,'[email protected]',69854521)

SQL UPDATE 语句

Update语句用于修改表中的数据
语法:UPDATE 表名 SET 列名 = 新值 WHERE 列名 = 值

UPDATE user SET name='鹿晗' WHERE id=5

注意:修改表中数据时一定要带上where表达式,否则将是毁灭性的灾难,导致表中数据全部修改;

SQL DELETE 语句

DELETE语句用于删除表中的行。
语法:DELETE FROM 表名 WHERE 列名 = 值

DELETE FROM newtable WHERE id=5

注意:删除表中数据时一定要带上where表达式,否则将是毁灭性的灾难,导致表中数据全部 ;

SQL语句的规范

1.SQL语句的保留字都大写
2.SQL命令本身是不区分大小写的,但是PHP区分,所以字段名,表名之类的都按真实的大小写来写。
3.分号是一条SQL命令的结束。PHP里面单条语句一般不需要写。
4.整型值一般不需要加引号,加了也不为错。
5.-- 代表SQL语句的注释
6.写UPDATE语句和DELETE语句时,最好先写WHERE条件,避免对数据造成灾难性的破坏。

SQL常用的运算符和函数

AND 并且
IN 包含的值,例如:WHERE ID IN(1,2,3,8,10)
OR 或者
=等于
!=不等于
<>不等于
大于
< 小于
BETWEEN 数值 AND 数值
RAND() 用在ORDER BY 的后面,随机表中数据
DISTINCT(字段名) -- SELECT DISTINCT age FROM user --去掉重复值的结果
COUNT(字段名) --统计行数,一般字段为主键
MAX(字段名)
MIN(字段名)
ASC(正序),DESC -- 排序,默认情况下都是ASC
字符串连接函数:
CONCAT_WS('分隔符',第一个字符串或字段名,第2个字符串或字段名,第3个...)
说明:连接后的字符会按前后顺序串在一起.
取平均值函数:AVG

SELECT AVG(字段名) FROM table_name
UCASE转换成大写字母:
LCASE转换成小写字母:
SELECT UCASE(字段名) FROM tb_users
SING()返回数值的符号,如果是负数,返回-1
类似三元运算符的操作方法:

SELECT CASE WHEN sexage then sex else age end),(case when qq>age then qq else age end) from user

SQL常用的查询语句

SELECT fname,id FROM ttt WHERE id=1;
SELECT fname,id FROM ttt WHERE fname='bbb';
SELECT fname,id FROM ttt WHERE fname='bbb' OR fname='aaa';
SELECT fname,id FROM ttt WHERE fname IN('bbb' ,'aaa');
SELECT fname,id FROM ttt WHERE fname LIKE '%b%';
SELECT fname,id FROM ttt WHERE fname LIKE '%b';
SELECT fname,id FROM ttt WHERE fname LIKE '%b_';
SELECT Fname from ttt where id>1;
SELECT fname FROM ttt WHERE id>1 AND id<3; == SELECT fname FROM ttt WHERE id=2;
SELECT * FROM ttt ORDER BY id ASC或者DESC --排序功能,ASC正序,DESC倒序
SELECT * FROM ttt ORDER BY RAND() --随机取值
SELECT * FROM ttt ORDER BY RAND() LIMIT 1; --随机并且每次只显示一条
SELECT * FROM ttt LIMIT 1; --只显示一条
SELECT * FROM ttt ORDER BY id DESC LIMIT 1;
SELECT * FROM ttt LIMIT 3,2;
SELECT * FROM ttt ORDER BY id DESC LIMIT 3,1;
SELECT * FROM ttt ORDER BY id DESC,Fnum ASC;
SELECT * FROM test ORDER BY CONVERT(Fname USING gbk); 中文排序
SELECT * FROM TTT GROUP BY Fnum;
//类似PHP的函数in_array()的功能
SELECT * FROM ttt WHERE FIND_IN_SET(1,Fcateids);
//AS后面的名称自定义,即别名
SELECT COUNT(id) AS totals FROM ttt;
SELECT * FROM tb_school WHERE id IN(select fid from tb_users);

SQL常用的添加语句

INSERT INTO 表名(字段列表) VALUES(字段值列表,与字段名一定要一一对应);

例如:
INSERT INTO ttt(name,num) VALUES('小崔',1);
INSERT INTO ttt(name,num) VALUES('小王',1);
INSERT INTO ttt(name,num) VALUES('小李',1);

SQL常用的更新语句

UPDATE 表名 SET 字段名='字段值' WHERE 条件

例如:
UPDATE ttt SET name='小崔' WHERE 条件;
UPDATE ttt SET name='小崔';
UPDATE ttt SET name='cccc' WHERE id=4; --不存在的数据,表不会被做任何更改
UPDATE ttt SET num=num+1 WHERE id=1;

SQL常用的删除语句

DELETE FROM 表名 WHERE条件 --清空表,删除数据,不是删除表

拓展

  • 有主从关系查询语句
SELECT A.id,B.name,B.sex FROM product_category_test A,t2 B WHERE A.Fid=B.Fid;
SELECT * FROM 一表 JOIN 二表 WHERE 一表.id = 二表.uid;
  • 无主从关系查询语句
SELECT 字段名 FROM 一表 UNION SELECT 字段名 FROM 二表;
  • 去重统计


    SQL语句_第4张图片
select account,sum(price) as priceAll from betting where (account,price) in (select account,price from betting)

任务

复习今日所讲内容,反复练习SQL语句,熟练为止;

你可能感兴趣的:(SQL语句)