SQL语句

SQL简介

什么是 SQL?

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

SQL 能做什么?

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

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

SQL 语法

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

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

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

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

返回结果集如下:

重要事项 一定要记住,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 中,操作符 <> 可以写为 !=

//查询年龄在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,'liyifeng@163.com',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 sex<age THEN sex ELSE age END FROM USER
select (case when sex>age 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 二表;
  • 去重统计


select account,sum(price) as priceAll from betting where (account,price) in (select account,price from betting)

任务

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 50个常用的sql语句 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cna...
    最美的太阳WW阅读 3,149评论 0 23
  • 一、基础 1、创建数据库(create) CREATE DATABASE database-namecreate ...
    YBshone阅读 635评论 0 1
  • 语 句 功 能 数据操作 SELECT——从数据库表中检索数据行和列INSERT——向数据库表添加新数据行DELE...
    戰敭阅读 5,044评论 0 53
  • 1. 选择目标,做足准备:给自己定个目标,设定心理预期,做好充足准备,在20小时内努力完成 2. 扫清障碍,腾出时...
    清风叶子阅读 149评论 0 0
  • 记者丹丹因为一时无法接受男友突然的分手和背叛,而一跃而下,结束了自己的生命。我想她不只是想通过这种方式表达她无法接...
    大兔鱼儿阅读 304评论 0 0