有时需要将表中的记录去掉重复后显示出来,可以用distinct关键字来实现,例如执行语句 SELECT * FROM user; 返回结果如下:
成都创新互联公司专业为企业提供横县网站建设、横县做网站、横县网站设计、横县网站制作等企业网站建设、网页设计与制作、横县企业网站模板建站服务,十多年横县做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
此时看到id=2,3的记录username字段相同,如果想查询所有不重复的username,可以执行如下:
SELECT distinct username FROM user;
例如执行排序语句: SELECT * FROM user order by id asc; 得到三条升序的数据,如果想限制只显示2条,可以使用LIMIT关键字: SELECT * FROM user order by id asc limit 0,2; 。LIMIT后面跟着的表示起始偏移量和前N行记录,默认起始偏移量为0,所以这句话也可以写为: SELECT * FROM user order by id asc limit 2; 。 LIMIT经常和order by一起配合使用来进行分页显示。
聚合操作的语法涉及下面几个参数:
示例:
表连接从大类上分为内连接和外连接。二者区别在于内连接只选出两张表中互相匹配的记录,外连接会选出其他不匹配的记录。
示例:
创建一个雇员表deployee,有五个人:
再创建一个部门表,有4个部门:
某些情况下,查询的条件是另外一个select语句的结果,这时用到子查询。子查询关键字有in,not in,= ,!=,exists,not exists等。
如执行 select * from deployee where deployee.dep_id in (select dep_id from department); 也表示查询有部门的雇员。如果子查询记录数唯一,可以使用=代替in:
select * from deployee where deployee.dep_id in (select dep_id from department where dep_id = 'sale'); 由于子查询只有一条记录,所有可以用等号
如果要求将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来,需要使用union和union all关键字来实现。
union 和 union all的主要区别是union all是把结果集直接合并在一起,而union 是将union all后的结果进行一次distinct,去除重复的记录。
示例:
一使用SELECT子句进行多表查询
SELECT 字段名 FROM 表1,表2 … WHERE 表1.字段 = 表2.字段 AND 其它查询条件
SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id
注:在上面的的代码中,以两张表的id字段信息相同作为条件建立两表关联,但在实际开发中不应该这样使用,最好用主外键约束来实现
二使用表的别名进行多表查询
如:SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 a,tb_demo065_tel b WHERE a.id=b.id AND b.id='$_POST[textid]'
SQL语言中,可以通过两种方式为表指定别名
第一种是通过关键字AS指定,如
SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 AS a,tb_demo065_tel AS b WHERE a.id=b.id
第二种是在表名后直接加表的别名实现
SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 a,tb_demo065_tel b WHERE a.id=b.id
使用表的别名应注意几下几点
(1)别名通常是一个缩短了的表名,用于在连接中引用表中的特定列,如果连接中的多个表中有相同的名称列存在,必须用表名或表的别名限定列名
(2)如果定义了表的别名就不能再使用表名
三合并多个结果集
SQL语言中,可以通过UNION 或 ALL将多个SELECT语句的查询结果合并输出,这两个关键字的使用说明如下:
UNION:利用该关键字可以将多个SELECT 语句的查询结果合并输出,并删除重复行
ALL:利用该关键字可以将多个SELECT 语句的查询结果合并输出,但不会删除重复行
在使用UNION或ALL关键字将多个表合并输出时,查询结果必须具有相同的结构并且数据类型必须兼容,另外使用UNION时两张表的字段数量也必须相同,否则会提示SQL语句有错误。
e.x:SELECT id,name,pwd FROM tb_demo067 UNION SELECT uid,price,date FROM tb_demo067_tel
四简单嵌套查询
子查询:子查询是一个SELECT查询,返回单个值且嵌套在SELECT、INSERT、UPDATE和DELETE语句或其它查询语句中,任何可以使用表达式的地方都可以使用子查询.
SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id='$_POST[test]')
内连接:把查询结果作为WHERE子句的查询条件即称为内连接
五复杂的嵌套查询
多表之间的嵌套查询可以通过谓词IN实现,语法格式如下:
test_expression[NOT] IN{
subquery
}
参数说明:test_expression指SQL表达式,subquery包含某结果集的子查询
多表嵌套查询的原理:无论是多少张表进行嵌套,表与表之间一定存在某种关联,通过WHERE子句建立此种关联实现查询
六嵌套查询在查询统计中的应用
实现多表查询时,可以同时使用谓词ANY、SOME、ALL,这些谓词被称为定量比较谓词,可以和比较运算符联合使用,判断是否全部返回值都满足搜索条件.SOME和ANY谓词是存在量的,只注重是否有返回值满足搜索条件,这两个谓词的含义相同,可以替换使用;ALL谓词称为通用谓词,它只关心是否有谓词满足搜索要求.
SELECT * FROM tb_demo069_people WHERE uid IN(SELECT deptID FROM tb_demo069_dept WHERE deptName='$_POST[select]')
SELECT a.id,a.name FROM tb_demo067 AS a WHERE id3)
ANY 大于子查询中的某个值
=ANY 大于等于子查询中的某个值
=ANY 小于等于子查询中的某个值
=ANY 等于子查询中的某个值
!=ANY或ANY 不等于子查询中的某个值
ALL 大于子查询中的所有值
=ALL 大于等于子查询中的所有值
=ALL 小于等于子查询中的所有值
=ALL 等于子查询中的所有值
!=ALL或ALL 不等于子查询中的所有值
来自MySQL的学习笔记,写的不对的地方大家多多指教哦
SELECT、DISTINCT、FROM、JOIN、ON、WHERE、GROUP BY、HAVING、SUM、COUNT、MAX、AVG、ORDER BY、LIMIT
SELECT-DISTINCT-FROM-JOIN-ON-WHERE-GROUP BY-HAVING-ORDER BY-LIMIT
必须字段:SELECT、FROM
可选字段:DISTINCT、JOIN、ON、WHERE、GROUP BY、HAVING、SUM、COUNT、MAX、AVG、ORDER BY、LIMIT
FROM-ON-JOIN-WHERE-GROUP BY(开始使用SELECT中的别名,后面的语句中都可以使用别名)-SUM、COUNT、MAX、AVG-HAVING-SELECT-DISTINCT-ORDER BY-LIMIT
FROM:从哪个表中检索数据
ON:关联条件,与join一起使用
JOIN:对需要关联的表进行关联
WHERE:过滤数据条件,执行顺序:自下而上、从右到左
GROUP BY:将过滤的数据进行分组,执行顺序:从左往右
SUM:求和
COUNT:数量统计
MAX:最大值
AVG:求平均值
HAVING:对分组的数据过滤条件,与group by一起使用
SELECT:查看结果集
DISTINCT:结果集去重
ORDER BY:排序,升序:ASC;降序:DESC
LIMIT:截取出目标页数据
详细用法会在后面进行补充
首先创建一张表,添加字段,表名字为:goodsmaster
添加数据的语法结构为:
添加数据可以是插入数据或插入查询的结果
1.1 插入数据
运行语句,查询结果:SELECT * FROM goodsmaster
部分字段有做非空约束,那么这边插入部分数据,验证下非空约束
上面的语句运行之后会报错,错误内容为“[Err] 1364 - Field 'barcode' doesn't have a default value”,即“barcode”这个字段有创建非空约束,表示这个字段不能为空,如果插入数据时不给这个字段赋值,那么就需要给它一个默认值。
部分字段没有默认值,可以为空,那么现在验证一下插入数据时,这些字段不进行赋值会有什么结果
运行语句,查询结果:SELECT * FROM goodsmaster
仔细看会发现,上面的语句中插入数据也没有插入“itemnumber”字段,这个字段有添加主键约束,不能为空,但由于设置了自增约束,所以没有赋值也会自动在当前字段最大值+1,这就是自增约束;
上面的语句显示没有进行赋值的字段会默认显示Null。
1.2 插入查询结果
MySQL 支持把查询的结果插入到数据表中,我们可以指定字段,甚至是数值,插入到数据表中。
语法结构为:
删除语句使用DELETE删除,语法结构为:
删除记录可以使用WHERE来筛选删除的数据,下面为删除“barcode”字段数据为006的记录
由于部分数据可以为空,所以再删除的时候,WHERE的过滤条件必须用到主键约束或者唯一性约束的字段。MySQL 的这种安全性设置,主要就是为了防止删除或者修改数据时出现误操作,导致删除或修改了不相关的数据。
删除表中的全部数据
MySQL中用UPDATE来修改数据,语法结构为:
注意:不要修改主键字段的值。因为主键是数据记录的唯一标识,如果修改了主键的值,就有可能会破坏数据的完整性。
语法结构:
具体需要用到的关键字查看本文第一部分即可
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款