mysql DQL语言操作
SQL语句的执行顺序:from-where-group by-having-select-order by
where 可以筛选多个条件,如 where A and B
1.排序
order by 列名 asc|desc
asc:升序排列 默认就是升序 所以可以省略
desc:降序排列
永远sql语句的最后
2.distinct 去除重复,只能指定一个字段,指定多个字段是distinct无效
无效:SELECT DISTINCT price,pname FROM product ORDER BY price
有效:SELECT DISTINCT price FROM product ORDER BY price
3.alter table 从表 add constraint 外键名(自定义) foreign key 从表(列名)
references 主表(列名);
4.如果时间的类型是date,则使用符号比较大小
SELECT empno,ename,hiredate FROM emp WHERE hiredate > '1981-02-01'
AND hiredate < '1987-05-01'
l 简单查询
去除重复数据
Select distinct *|列名,列名 from 表 where 条件
别名(as可以省略)
Select * from product as p
Select pname as pn from product
查询结果是表达式(运算查询):将所有商品的价格+10元进行显示
select pname,price+10 from product;
l 条件查询
比较运算符
> < <= >= = <>
大于、小于、大于(小于)等于、不等于
BETWEEN ...AND...
显示在某一区间的值(含头含尾)
IN(set)
显示在in列表中的值,例:in(100,200)
LIKE ‘张pattern’
模糊查询,Like语句中,
%代表零个或多个任意字符,
_代表一个字符,
例如:first_name like ‘_a%’;
IS NULL
判断是否为空
逻辑运算符
and
多个条件同时成立
or
多个条件任一成立
not
不成立,例:where not(salary>100);
#查询商品价格在200到1000之间所有商品
SELECT * FROM product WHERE price >= 200 AND price <=1000;
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;
#查询商品价格是200或800的所有商品
SELECT * FROM product WHERE price = 200 OR price = 800;
SELECT * FROM product WHERE price IN (200,800);
#查询含有'霸'字的所有商品
SELECT * FROM product WHERE pname LIKE '%霸%';
#查询以'香'开头的所有商品
SELECT * FROM product WHERE pname LIKE '香%';
#查询第二个字为'想'的所有商品
SELECT * FROM product WHERE pname LIKE '_想%';
#商品没有分类的商品
SELECT * FROM product WHERE category_id IS NULL
#查询有分类的商品
SELECT * FROM product WHERE category_id IS NOT NULL
l 排序查询
#通过order by语句,可以将查询出的结果进行排序。
SELECT * FROM 表名 ORDER BY 排序字段 ASC|DESC;
#在价格排序(降序)的基础上,以分类排序(降序)
SELECT * FROM product ORDER BY price DESC,category_id DESC;
#显示商品的价格(去重复),并排序(降序)
SELECT DISTINCT price FROM product ORDER BY price DESC;
l 聚合查询
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。
今天我们学习如下五个聚合函数:
count:统计指定列不为NULL的记录行数;
sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
l 查询分类为'c001'的所有商品价格的总和
SELECT SUM(price) FROM product WHERE category_id = 'c001';
l 查询分类为'c002'所有商品的平均价格
SELECT AVG(price) FROM product WHERE category_id = 'c002';
l 查询商品的最大价格和最小价格
SELECT MAX(price),MIN(price) FROM product;
l 分组查询
分组查询是指使用group by字句对查询信息进行分组。
格式:
SELECT 字段1,字段2… FROM 表名 GROUPBY分组字段 HAVING 分组条件;
分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。
having与where的区别:
having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
1 统计各个分类商品的个数
SELECT category_id ,COUNT(*) FROM product GROUP BY category_id ;
2 统计各个分类商品的个数,且只显示个数大于1的信息
SELECT category_id ,COUNT(*) FROM product GROUP BY category_idHAVING COUNT(*) > 1;
l 外键约束
l 声明外键约束
语法:alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
[外键名称]用于删除外键约束的,一般建议“_fk”结尾
altertable 从表 drop foreignkey 外键名称
l 使用外键目的:
保证数据完整性
l 多表查询
SQL语句的执行顺序:from-where-group by-having-select-order by
1. 交叉连接查询(基本不会使用-得到的是两个表的乘积) [了解]
语法:select *from A,B;
2. 内连接查询(使用的关键字 inner join -- inner可以省略)
隐式内连接:select* from A,B where 条件;
显示内连接:select* from A inner join B on 条件;
3. 外连接查询(使用的关键字 outer join -- outer可以省略)
左外连接:leftouter join
select * from A left outer join B on 条件;
右外连接:rightouter join
select * from A right outer join B on 条件;
三种连接的区别:
例如:
CREATE TABLE category (
cidVARCHAR(32) PRIMARY KEY ,
cnameVARCHAR(50)
);
CREATE TABLE products(
pidVARCHAR(32) PRIMARY KEY ,
pnameVARCHAR(50),
price INT,
flagVARCHAR(2), #是否上架标记为:1表示上架、0表示下架
category_idVARCHAR(32),
CONSTRAINTproducts_fk FOREIGN KEY (category_id) REFERENCES category (cid)
);
#分类
INSERT INTO category(cid,cname) VALUES('c001','家电');
INSERT INTO category(cid,cname) VALUES('c002','服饰');
INSERT INTO category(cid,cname) VALUES('c003','化妆品');
#商品
INSERT INTO products(pid,pname,price,flag,category_id) VALUES('p001','联想',5000,'1','c001');
INSERT INTO products(pid,pname,price,flag,category_id) VALUES('p002','海尔',3000,'1','c001');
INSERT INTO products(pid,pname,price,flag,category_id) VALUES('p003','雷神',5000,'1','c001');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES('p004','JACK JONES',800,'1','c002');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES('p005','真维斯',200,'1','c002');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES('p006','花花公子',440,'1','c002');
INSERT INTO products (pid, pname,price,flag,category_id)VALUES('p007','劲霸',2000,'1','c002');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES('p008','香奈儿',800,'1','c003');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES('p009','相宜本草',200,'1','c003');
#1.查询哪些分类的商品已经上架
#隐式内连接
SELECT DISTINCT c.cname FROM category c , productsp
WHEREc.cid = p.category_id AND p.flag = '1';
#内连接
SELECT DISTINCT c.cname FROM category c
INNER JOINproducts p ON c.cid = p.category_id
WHEREp.flag = '1';
#2.查询所有分类商品的个数
#左外连接
INSERT INTO category(cid,cname) VALUES('c004','奢侈品');
SELECT cname,COUNT(category_id) FROM category c
LEFT OUTER JOIN products p
ONc.cid = p.category_id
GROUP BYcname;
l 子查询
子查询:一条select语句结果作为另一条select语法一部分(查询条件,查询结果,表等)。
select ....查询字段 ... from ... 表.. where ...查询条件
#3 子查询,查询“化妆品”分类上架商品详情
#隐式内连接
SELECT p.* FROM products p , category c
WHEREp.category_id=c.cid AND c.cname = '化妆品';
#子查询
##作为查询条件
SELECT * FROM products p
WHEREp.category_id =
(
SELECTc.cid FROM category c
WHEREc.cname='化妆品'
);
##作为另一张表
SELECT * FROM products p ,
(SELECT * FROM category WHERE cname='化妆品') c
WHERE p.category_id = c.cid;
#查询“化妆品”和“家电”两个分类上架商品详情
SELECT * FROM products p
WHEREp.category_id in
(
SELECTc.cid FROM category c
WHEREc.cname='化妆品' or c.name='家电'
)
mysql DQL语言操作的更多相关文章
- Mysql 数据库操作之DDL、DML、DQL语句操作
Mysql 数据库操作之DDL.DML.DQL语句操作 设置数据库用户名密码 l Show databases 查看数据库列表信息 l 查看数据库中的数据表信息 ,格式: use 数据库名: sh ...
- C语言对mysql数据库的操作
原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎么使用而进行查阅的! 我们言归正 ...
- Linux C语言操作MySQL
原文:Linux C语言操作MySQL 1.MySQL数据库简介 MySQL是一个开源码的小型关系数据库管理系统,体积小,速度快,总体成本低,开源.MySQL有以下特性: (1) 使用C和C++编写, ...
- Go语言操作MySQL数据库
Go语言操作MySQL数据库 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用 ...
- 使用Go语言操作MySQL数据库的思路与步骤
最近在做注册登录服务时,学习用Go语言操作MySQL数据库实现用户数据的增删改查,现将个人学习心得总结如下,另外附有代码仓库地址,欢迎各位有兴趣的fork. 软件环境:Goland.Navicat f ...
- go语言入门教程百度网盘 mysql图形化操作与数据导入
mysql图形化操作与数据导入 @author:Davie 版权所有:北京千锋互联科技有限公司 数据库存储技术 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个 ...
- c语言操作mysql数据库
c语言操作Mysql数据库,主要就是为了实现对数据库的增.删.改.查等操作,操作之前,得先连接数据库啊,而连接数据库主要有两种方法.一.使用mysql本身提供的API,在mysql的安装目录中可可以看 ...
- MySQL的DQL语言(查)
MySQL的DQL语言(查) DQL:Data Query Language,数据查询语言. DQL是数据库中最核心的语言,简单查询,复杂查询,都可以做,用select语句. 1. 查询指定表的全部字 ...
- MySQL笔记总结-DQL语言
DQL语言 基础查询 一.语法 select 查询列表 from 表名; 二.特点 1.查询列表可以是字段.常量.表达式.函数,也可以是多个 2.查询结果是一个虚拟表 三.示例 1.查询单个字段 se ...
随机推荐
- 十一、Node.js监听代码改动自动重启node插件supervisor
我们慢慢地发现,每次我们稍微改变js代码都需要重启服务才能在浏览器显示新的效果,很麻烦,这里我们可以通过npm命令安装supervisoror插件,安装方法如下 之前章节我们知道安装了nodejs就会 ...
- Quicksort------代码之美
#include<iostream> #include<cstdlib> #include<time.h> using namespace std; void sw ...
- Struts2学习第3天--OGNL、EL、值栈
JAVA中的OGNL: 1 调用对象的方法: 2 访问对象的静态方法: 3 获取OGNLContext.Root中的数据. User: 4 访问Context: 关键还是在Struts2环境中的使用: ...
- Intellij IDEA神器那些让人爱不释手的小技巧
完整的IDEA使用教程,GitHub地址: https://github.com/judasn/IntelliJ-IDEA-Tutorial 概述 之前写了一篇介绍IntellIJ IDEA的文章 ...
- 【转】asp.net中设置弹出谈话框的几种方式详解
源地址:https://blog.csdn.net/zou15093087438/article/details/79637114 注:可用winform的MessageBox的方法,只需引用Syst ...
- 表单校验--js部分
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- 连接池、数据源、JNDI三者间的关系及用法
连接池:连接池是由容器(比如Tomcat)提供的,用来管理池中的连接对象.连接池自动分配连接对象并对闲置的连接进行回收.连接池中的连接对象是由数据源(DataSource)创建的.连接池(Connec ...
- 【BZOJ4800】[CEOI2015 Day2]世界冰球锦标赛 (折半搜索)
[CEOI2015 Day2]世界冰球锦标赛 题目描述 译自 CEOI2015 Day2 T1「Ice Hockey World Championship」 今年的世界冰球锦标赛在捷克举行.\(Bob ...
- 条目四《用empty来代替检查size()是否为0》
条目四<用empty来代替检查size()是否为0> 首先先说结论: empty()实现为内联函数.(众所周知, 优秀的内联函数的效率比一般函数是高的) 在stl标准库中,empty()对 ...
- (转)VS2010实用快捷键
1,Visual Studio 2008自带的1000多个 Windows 系统使用的各种图标.光标和动画文件在Visual Studio 2008的安装目录下,/Microsoft Visual S ...