一、DBMS 数据库管理系统
二、DB 数据库DataBase
三、SQL
结构化查询语言(Structured Query Language),是关系数据库的标准语言,它的特点是:简单、灵活、功能强大。
1、SQL的分类:
DQL:数据查询语言
DML:数据操作语言(数据的增删改)
DDL:建表语句:库,表的维护语句
2、表的约束:
非空(NOT NULL)
主键约束(PRIMARY KEY):非空且唯一
自然主键:使用具有业务含义的列。(不推荐)
代理主键:使用没有业务含义的列。ID(推荐)
3、DQL:查询(单表)
①简单查询
SELECT 列名1,列名2,列名3 FROM (表,视图,子查询) 数据源;
SELECT id,salePrice FROM product;
SQL 执行的方式
1.右键 选择->执行已选择的
2.右键 选择-》ctrl+shift+r
求: 查询商品的分类编号(看看有哪些分类)
SELECT dir_id FROM product;
②去重 DISTINCT
SELECT DISTINCT dir_id FROM product;
③数学运算:
查询所有货品的id,名称和批发价(批发价=卖价*折扣)
SELECT dir_id,productName,salePrice*cutoff FROM product;
查询所有货品的id,名称,和各进50个的成本价(成本=costPrice)
SELECT dir_id,productName,costprice*50 FROM product;
查询所有货品的id,名称,各进50个,并且每个运费1元的成本
SELECT dir_id,productName,(costPrice+1)*50 FROM product;
④设置别名,隐藏复杂的表达式
SELECT dir_id,productName,(costPrice+1)*50 AS tradePrice FROM product;
⑤java和MySQL常用类型对照:
JAVA Java备注 MYSQL MYSQL备注
Int 短整型 int 短整型
long 长整型 bigint 长整型
bigdecimal 金融数据 decimal 金融数据
String 字符串 char 不可变字符串
varchar 可变字符串
⑥条件查询
SELECT 列名1,列名2,列名3 FROM (表,视图,子查询) 数据源 WHERE 条件;
查询货品零售价为119的所有货品信息;
SELECT * FROM product WHERE salePrice = 119;
查询货品名为罗技G9X的所有货品信息;
SELECT * FROM product WHERE productName = '罗技G9X';
查询货品名 不为 罗技G9X的所有货品信息;
SELECT * FROM product where productName != '罗技G9X';
查询分类编号不等于2的货品信息;
SELECT * FROM product WHERE dir_id != 2;
查询货品名称,零售价小于等于200的货品;
SELECT * FROM product WHERE salePrice <= 200;
查询id,货品名称,批发价大于350的货品;
SELECT dir_id,productName,salePrice FROM product WHERE salePrice > 350;
⑦条件查询之逻辑运算(AND OR NOT)
选择id,货品名称,批发价在300-400之间的货品;
SELECT dir_id,productName,salePrice*cutoff FROM product WHERE salePrice*cutoff>=300 AND salePrice*cutoff<=400;
选择id,货品名称,分类编号为2,4的所有货品;
SELECT dir_id,productName FROM product WHERE dir_id= 2 OR dir_id = 4;
选择id,货品名词,分类编号不为2的所有商品;
SELECT dir_id,productName FROM product WHERE NOT dir_id= 2;
选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200;
SELECT dir_id,productName FROM product WHERE salePrice >= 250 OR costPrice >=200;
⑧范围查询(BETWEEN AND)
选择id,货品名称,批发价在300-400之间的货品;
SELECT dir_id,productName,salePrice*cutoff FROM product WHERE salePrice*cutoff BETWEEN 300 AND 400;
选择id,货品名称,批发价不在300-400之间的货品;
SELECT dir_id,productName,salePrice*cutoff FROM product WHERE salePrice*cutoff NOT BETWEEN 300 AND 400;
⑨集合(IN):IN指的是只选择这个值对应的记录
选择id,货品名称,分类编号为2,4的所有货品;
SELECT dir_id,productName FROM product WHERE dir_id IN (2,4);
选择id,货品名称,分类编号不为2,4的所有货品;
SELECT dir_id,productName FROM product WHERE dir_id NOT IN(2,4);
⑩空值查询(IS NULL)
查询商品名为NULL的所有商品信息;
SELECT * FROM product WHERE productName IS NULL;
查询商品名为NULL的所有商品信息;
SELECT * FROM product WHERE productName NOT IS NULL;
一般来说NOT都是放在where后面的条件之前,但是IS NULL 这个是放在它俩中间,如下:
SELECT * FROM product WHERE productName IS NOT NULL;
⑪模糊查询(LIKE)
匹配的规则:
_ :匹配任意的一个字符
% :匹配任意的多个字符
查询id,货品名称,货品名称匹配'%罗技M9_';
SELECT dir_id,productName FROM product WHERE productName LIKE '%罗技M9_';
⑫正则表达式查询(REGEXP)
需求:查询包含字母的商品信息;
SELECT * FROM product WHERE productName REGEXP '[a-z]';
⑬排序(ORDER BY)
SELECT 列 FROM tableName ORDER BY 排序的列 排序的规则;
默认是升序排列 ASC;
降序是 DESC;
选择id,货品名称,分类编号,零售价先按分类编号排序,再按零售价排序;
SELECT id,productName,dir_id,salePrice FROM product ORDER BY dir_id,salePrice;
选择id,货品名称,分类编号,零售价并且按零售价降序排序;
SELECT id,productName,dir_id,salePrice FROM product ORDER BY salePrice DESC;
查询M系列并按照批发价排序(加上别名);
SELECT *,salePrice*cutoff AS tradePrice FROM product WHERE productName LIKE '%M%' ORDER BY tradePrice;
查询分类为2并按照批发价排序(加上别名);
SELECT *,salePrice*cutoff AS tradePrice FROM product WHERE dir_id = 2 ORDER BY tradePrice;
⑭分页(LIMIT)
分页的关键字 LIMIT(开始的索引,每页的条数);
分页设计:
假分页(逻辑分页): 把数据全部查询出来,存在于内存中,翻页的时候,直接从内存中去截取.
真分页(物理分页): 每次翻页都去数据库中去查询数据.
假分页: 翻页比较快,但是第一次查询很慢,若数据过大,可能导致内存溢出.
真分页: 翻页比较慢,若数据过大,不会导致内存溢出.
分页:一页有五条数据,假如是从0开始的,name第n页索引为(n-1)*5 --- n*5-1
第三页
SELECT * FROM product LIMIT 10,5;
第四页
SELECT * FROM product LIMIT 15,5;
⑮聚合函数
最大值:max(列名称)
最小值:min(列名称)
平均值:AVG(列名称)
总和: SUM(列名称)
总记录数:count(列名称)
查询有多少条商品信息
SELECT count(productName) from product;
查询所有商品平均零售价
select AVG(salePrice) FROM product;
查询商品总记录数(注意在Java中必须使用long接收)
SELECT count(*) FROM product;
查询分类为2的商品总数
SELECT count(*) FROM product WHERE dir_id = 2;
查询商品的最小零售价,最高零售价,以及所有商品零售价总和
SELECT min(salePrice),MAX(salePrice),SUM(saleprice) FROM product;
⑯分组(GROUP BY 一般和聚集函数一起使用)
查询每个商品分类编号和每个商品分类各自的平均零售价;
SELECT dir_id,AVG(salePrice) FROM product GROUP BY dir_id;
查询每个商品分类编号和每个商品分类各自的商品总数;
SELECT dir_id,count(*) FROM product GROUP BY dir_id;
查询每个商品分类编号和每个商品分类中零售价大于100的商品总数;
SELECT dir_id,count(*) FROM product WHERE salePrice > 100 GROUP BY dir_id;
查询零售价总和大于1500的商品分类编号以及总零售价和;
where 条件后面不能使用聚集函数,HAVING后面可以使用聚合函数
SELECT dir_id,sum(salePrice) AS total FROM product GROUP BY dir_id HAVING total > 1500;