-- 上午的总结1,DBAS -> DBMS ->DB ->table 表(关系)2, 数据库操作语言
showDATABASES-- 查看DBMS(mysql)里面所有的数据库-- 对数据库的超出CREATEDATABASE 数据库名;-- 创建数据库DROPDATABASE 数据库;-- 删除数据库USE 数据库的名称 -- 使用当前数据库-- 对表的操作SHOWTABLES;-- 查询表CREATETABLE 表名(
id int(数据的长度),
name VARCHAR(长度)-- 结尾不用逗号);-- 创建表DROPTABLE 表名;-- 删除表-- java类型对应 数据库的类型
Long ->bigint
String ->char或 VARCHAR
bigdecimal ->DECIMALBoolean->bit-- 表的约束 ctrl+D 设置表(快捷键)1.主键 (非空且唯一)
单列主键
复合主键
------------------
自然主键 这个字段可能在我的软件中和业务有关系
代理主键 和业务没有关系 -- 推荐使用 id2.非空
3.唯一
4.自动递增
5.默认值
-- 对表里数据的CRUD ------- 下午-------------------------- 1,导入数据
-- 对表的查看 - 数据库查询语句SELECT 列名1,列名2,列名3,...(*)FROM 表名(视图 子查询)-->数据源; -- 不建议写 * (效率慢) 数据库优化方法SELECT*FROM product;-- 查询所有货品(product) 信息SELECT*FROM product;-- 查询所有货品的id,productName,salePriceSELECT id,productName,salePrice FROM product;-- 消除重复的数据SELECTDISTINCT brand FROM product
-- 实现数学运算-- 查询所有货品的id,名称和批发价(批发价=卖价*折扣)SELECT id, productName, salePrice*costPrice FROM product
-- 查询所有货品的id,名称,和各进50个的成本价(成本=costPrice)SELECT id, productName,50*costPrice FROM product;-- 查询所有货品的id,名称,各进50个,并且每个运费1元的成SELECT id, productName,50*(costPrice+1)FROM product;-- 别名的使用-- 查询所有货品的id,名称,各进50个,并且每个运费1元的成本(使用别名)SELECT id, productName,50*(costPrice+1)as 成本 FROM product;-- 使用别名的第一种方式SELECT id, productName,50*(costPrice+1) 成本 FROM product;-- 使用别名的第二种方式-- 设置显示格式 CONCAT 函数 ex:列名:productSalePrice,行内容:罗技M90商品的零售价为:90.00SELECT CONCAT(productName,'商品的零售价为:',salePrice)AS productSalePrice FROM product;-- 过滤查询 比较运算符 ------------- 公式SELECT 列名1,列名2,...FROM 表名 WHERE 条件; 单条件
SELECT 列名1,列名2,...FROM 表名 WHERE 条件1AND 条件2; 多条件 AND(且)SELECT 列名1,列名2,...FROM 表名 WHERE 条件1OR 条件2; 多条件 or(或)-- 练习 -- 查询货品零售价为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 productName,salePrice FROM product WHERE salePrice<=200;-- 查询id,货品名称,批发价,对于批发价大于350的货品SELECT id,productName,salePrice*cutoff AS pfj FROM product WHERE salePrice*cutoff>350;-- 思考:使用where后面使用别名不行,总结select和where的执行顺序SQL 的执行顺序 (面试题)from->where->SELECT-- 字符串大小写的区分 BINARYSELECT*FROM product WHEREBINARY productName='罗技g9x'-- 逻辑运算 and or NOT(....)-- 选择id,货品名称,批发价在300-400之间的货品SELECT id,productName, salePrice*cutoff as pfj from product where salePrice*cutoff>=300and salePrice*cutoff<=400-- 选择id,货品名称,分类编号为2,4的所有货品SELECT id,productName ,dir_id FROM product where dir_id=2OR dir_id=4;-- 选择id,货品名词,分类编号不为2的所有商品SELECT id, productName ,dir_id FROM product where dir_id !=2;-- 选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200select id,productName ,dir_id ,salePrice,costPrice from product where salePrice>=250OR costPrice>=200;SELECT 列名1,列名2,...FROM 表名 WHERE 条件; 单条件
select 列名1,列名2,...from 表名 where 条件1and(or) 条件2;-- ============================= 特重要-- 范围查询 BETWEEN AND between and SELECT 列名1,列名2,(*)FROM 表名 WHERE 列名 between 最小值 and 最大值 ------ 选择id,货品名称,批发价在300-400之间的货品SELECT id,productName,salePrice*cutoff pfj FROM product WHERE salePrice*cutoff>=300AND salePrice*cutoff<=400;-- 没有用between and 的写法SELECT id,productName,salePrice*cutoff pfj FROM product WHERE salePrice*cutoff between300AND400;-- 用between and 的写法-- 选择id,货品名称,批发价不在300-400之间的货品SELECT id,productName,salePrice*cutoff pfj FROM product WHERE salePrice*cutoff NOTbetween300AND400;-- not 的使用-- 集合查询 inSELECT 列名1,列名2(*)FROM 表名 WHERE 列名 in(值1,值2,)-- 选择id,货品名称,分类编号为2,4的所有货品SELECT*FROM product where dir_id=2or dir_id=4;-- 不要in的写法SELECT*FROM product where dir_id IN(2,4);-- 用in的写法-- 选择id,货品名称,分类编号不为2,4的所有货品SELECT*FROM product where dir_id NOTIN(2,4);-- 空值查询-- 查询商品名为NULL的所有商品信息SELECT*FROM product where productName isnull-- 为空 SELECT*FROM product where productName ="";-- 对空字符串的查询-- 模糊查询 LIKE % (匹配零个或多个字符串) _(匹配一个字符串) like -- 查询id,货品名称,货品名称匹配'%罗技M9_' SELECT id,productName FROM product WHERE productName LIKE'%罗技M9_'-- 查询id,货品名称,分类编号,零售价大于等于200并且货品名称匹配'%罗技M1__'SELECT id,productName,dir_id,salePrice FROM product WHERE salePrice>200AND productName LIKE'%罗技%'-- 正则表达式 -- 查找product_name字段中包含字母的所有数据SELECT*FROM product WHERE productName REGEXP'[a-zA-Z]'-- 排序 ORDER BY DESC ASC -- 选择id,货品名称,分类编号,零售价并且按零售价降序排序SELECT id,productName,dir_id,salePrice FROM product ORDERBY salePrice DESC-- DESC 降序SELECT id,productName,dir_id,salePrice FROM product ORDERBY salePrice -- ORDER BY 默认 是 ASC-- 选择id,货品名称,分类编号,零售价先按分类编号排序,再按零售价排序 SELECT id,productName,dir_id,salePrice FROM product ORDERBY dir_id, salePrice
-- 查询M系列并按照批发价排序(加上别名)SELECT*, salePrice*cutoff pfj FROM product WHERE productName like'%M%'ORDERBY pfj
SQL 的执行顺序 (面试题)from->where->SELECT->ORDERBY-- 查询分类为2并按照批发价排序(加上别名) SELECT*, salePrice*cutoff pfj FROM product WHERE dir_id=2ORDERBY pfj
-- 分页查询 LIMIT (重点 慢慢来掌握)
逻辑分页-- 一次性全部查出来 ,然后把数据交给浏览器,让浏览器自己去分页SELECT*from product
物理分页-- 推荐 不一次查询完 LIMIT SELECT*FROM product limit ?,? -- 第一个?代表从哪一个开始查,第二个?代表查询多少条SELECT*FROM product limit0,5-- 第一页SELECT*FROM product limit5,5-- 第二页--------------------------------------------------------------
每页展示五条数据
1, 0,5(1-1)*5=02, 5,5(2-1)*5=53, 10,5(3-1)*5=10415,5(4-1)*5=15.................(n-1)*5-- 聚集函数-- 查询所有商品平均零售价SELECTAVG(salePrice)FROM product;-- 查询商品总记录数(注意在Java中必须使用long接收)SELECTCOUNT(1)FROM product;-- 统计-- 查询分类为2的商品总数SELECTCOUNT(1)FROM product WHERE dir_id =2-- 查询商品的最小零售价,最高零售价,以及所有商品零售价总和SELECTMIN(salePrice),MAX(salePrice),SUM(salePrice)FROM product;-- 分组查询 GROUP BY (稍难的)-- 查询每个商品分类编号和每个商品分类各自的平均零售价SELECTAVG(salePrice)FROM product GROUPBY dir_id
-- 查询每个商品分类编号和每个商品分类各自的商品总数。SELECTcount(*),dir_id FROM product GROUPBY dir_id
-- 查询每个商品分类编号和每个商品分类中零售价大于100的商品总数:SELECTcount(*),dir_id FROM product WHERE salePrice>100GROUPBY dir_id
-- 查询零售价总和大于1800的商品分类编号以及总零售价和:SELECTsum(salePrice),dir_id FROM product GROUPBY dir_id HAVINGsum(salePrice)>1800-- 分组前的条件用where,分组后的条件用having-- 存储引擎
MyISAM 不支持事务 表锁
InnoDB 支持事务 行锁
memory 不支持事务 表锁 不入库
对事务要求高我们用InnoDB,对事务要求不高我们用MyISAM,对事务要求不高 且查询修改极其频繁 且数据不用入库(重启数据库数据就消失)我们用memory
homework
需求: 查询所有货品信息
SELECT*FROM product;
需求: 查询所有货品的id,productName,salePrice
SELECT id,productName,salePrice FROM product;
需求: 查询商品的分类编号。
SELECT dir_id FROM product GROUPBY dir_id;
需求: 查询所有货品的id,名称和批发价(批发价=卖价*折扣)SELECT id,productName,salePrice*cutoff as 批发价 FROM product;
需求: 查询所有货品的id,名称,和各进50个的成本价(成本=costPirce)SELECT id,productName,50*costPrice AS 成本价 FROM product;
需求: 查询所有货品的id,名称,各进50个,并且每个运费1元的成本
SELECT id,productName,50*(costPrice+1)FROM product;
需求: 查询所有货品的id,名称,各进50个,并且每个运费1元的成本(使用别名)SELECT id,productName,50*(costPrice+1)AS 成本价 FROM product;
需求: 查询商品的名字和零售价。格式:xxx商品的零售价为:xxx
SELECT CONCAT(productName,'商品的零售价为: ',salePrice)FROM product;
需求: 查询货品零售价为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!=2GROUPBY dir_id;
需求: 查询货品名称,零售价小于等于200的货品
SELECT productName,salePrice FROM product WHERE salePrice<=200;
需求: 查询id,货品名称,批发价大于350的货品
SELECT id,productName,salePrice*cutoff As 批发价 FROM product WHERE(salePrice*cutoff)>350;
需求: 查询id,货品名称,批发价在300-400之间的货品(使用 and)SELECT id,productName,salePrice*cutoff As 批发价 FROM product WHERE(salePrice*cutoff)>=300AND(salePrice*cutoff)<=400;
需求: 查询id,货品名称,分类编号为2,4的所有货品
SELECT id,productName,dir_id FROM product WHERE dir_id=2OR dir_id=4;
需求: 查询id,货品名词,分类编号不为2的所有商品
SELECT id,productName ,dir_id FROM product WHERE dir_id!=2GROUPBY dir_id;
需求: 选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200SELECT id,productName,dir_id,salePrice,costPrice FROM product WHERE salePrice>=250OR costPrice>=200GROUPBY dir_id;
需求: 查询id,货品名称,批发价在300-400之间的货品(使用between)SELECT id,productName,(salePrice*cutoff)AS 批发价 FROM product WHERE(salePrice*cutoff)BETWEEN300AND400;
需求: 查询id,货品名称,批发价不在300-400之间的货品
SELECT id,productName,(salePrice*cutoff)AS 批发价 FROM product WHERE(salePrice*cutoff)NOTBETWEEN300AND400;
需求: 查询id,货品名称,分类编号为2,4的所有货品
SELECT id,productName,dir_id FROM product WHERE dir_id IN(2,4);
需求: 查询id,货品名称,分类编号不为2,4的所有货品
SELECT id,productName,dir_id FROM product WHERE dir_id NOTIN(2,4);
需求: 查询商品名为NULL的所有商品信息。
SELECT*FROM product WHERE ISNULL(productName);
需求: 查询id,货品名称,货品名称匹配'%罗技M9_'SELECT id,productName FROM product WHERE productName LIKE'%罗技M9_%';
需求: 查询id,货品名称,分类编号,零售价大于等于200并且货品名称匹配'%罗技M1__'SELECT id,productName,dir_id,salePrice FROM product WHERE salePrice>=200AND productName LIKE'%罗技%';
需求: 查询id,货品名称,分类编号,零售价并且按零售价降序排序
SELECT id,productName,dir_id,salePrice FROM product ORDERBY salePrice ASC;
需求: 查询id,货品名称,分类编号,零售价先按分类编号排序,再按零售价排序
SELECT id,productName,dir_id,salePrice FROM product ORDERBY dir_id ,salePrice;
需求: 查询M系列并按照批发价排序(加上别名)SELECT productName,salePrice*cutoff AS 批发价 FROM product WHERE productName LIKE'%M%'ORDERBY 批发价;
需求: 查询分类为2并按照批发价排序(加上别名)SELECT dir_id,salePrice*cutoff AS 批发价 FROM product WHERE dir_id =2ORDERBY 批发价;
需求:分页查询
每页最多3条记录: pageSize =3:
SELECT*FROM product LIMIT0,3;SELECT*FROM product LIMIT3,3;SELECT*FROM product LIMIT6,3;SELECT*FROM product LIMIT9,3;SELECT*FROM product LIMIT12,3;SELECT*FROM product LIMIT15,3;SELECT*FROM product LIMIT18,3;SELECT*FROM product LIMIT(n-1)*3,3;
需求: 查询所有商品平均零售价
SELECTAVG(salePrice)AS 平均零售价 from product;
需求: 查询商品总记录数(注意在Java中必须使用long接收)SELECTCOUNT(1)FROM product;
需求: 查询分类为2的商品总数
SELECTCOUNT(1),dir_id FROM product WHERE dir_id =2;
需求: 查询商品的最小零售价,最高零售价,以及所有商品零售价总和
SELECTMIN(salePrice),MAX(salePrice),SUM(salePrice)FROM product;
需求: 查询每个商品分类编号和每个商品分类各自的平均零售价
SELECTAVG(salePrice),dir_id FROM product GROUPBY dir_id;
需求: 查询每个商品分类编号和每个商品分类各自的商品总数。
SELECTCOUNT(dir_id),dir_id FROM product GROUPBY dir_id;
需求: 查询每个商品分类编号和每个商品分类中零售价大于100的商品总数:
SELECT dir_id,COUNT(salePrice)FROM product WHERE salePrice>100GROUPBY dir_id;
需求: 查询零售价总和大于1500的商品分类编号以及总零售价和:
SELECTSUM(salePrice)FROM product GROUPBY dir_id HAVINGSUM(salePrice)>1800;
MySQL基础练习
SELECT
a1. NAME AS 国家,
a2. NAME AS 省自治区,
a3. NAME AS 市级,
a4. NAME AS 地区
FROM
area AS a1
JOIN area AS a2
JOIN area AS a3
JOIN area AS a4
ON a1.id = a2.parentid
AND a2.id = a3.parentid
AND a3.id = a4.parentid;SELECT 地区 from 测试 as p1 join 测试 as p2 on p1.号码=p2.号码
SELECT
a1. 地区 AS 省自治区,
a2. 地区 AS 市级,
a3. 地区 AS 地方
FROM
测试 AS a1
JOIN 测试 AS a2
JOIN 测试 AS a3
ON a1.编号 = a2.号码
AND a2.编号 = a3.号码
day2 mysql
-- 为什么要用多表查询?
可以减少单表厘面的字段 ,可以很灵活的查询相要的数据。。
-- 迪卡尔积
就是两张表 组合查询时 一张表的一行数据 会和另一张表的每一行都组合一下 (22*4)-- 示例 SELECT*from product,productdir;-- 消除迪卡尔积 -- 内链接SELECT*from product,productdir where product.dir_id =productdir.id -- 隐式内链接SELECT*from product INNERJOIN productdir ON product.dir_id =productdir.id -- 显示内链接SELECT*from product JOIN productdir ON product.dir_id =productdir.id -- 显示内链接 写法2.-- 练习 -- 查询货品id,货品名称,货品所属分类名称SELECT product.*,productdir.dirName FROM product INNERJOIN productdir ON product.dir_id=productdir.id
-- 查询零售价大于200的无线鼠标SELECT*FROM product AS p INNERJOIN productdir AS pd ON p.dir_id=pd.id AND p.salePrice>200AND pd.dirName='无线鼠标'-- 查询零售价大于200的无线鼠标(使用表的别名)SELECT*FROM product AS p INNERJOIN productdir AS pd ON p.dir_id=pd.id AND p.salePrice>200AND pd.dirName='无线鼠标'-- 查询每个货品对应的分类以及对应的库存SELECT p.*, pd.dirName, ps.store_num FROM product p INNERJOIN productdir pd INNERJOIN product_stock ps ON p.dir_id=pd.id AND p.id=ps.product_id
-- 如果库存货品都销售完成,按照利润从高到低查询货品名称,零售价,货品分类(三张表).SELECT
p.productName,
p.salePrice,
pd.dirName,(p.salePrice - p.costPrice)* ps.store_num AS lr
FROM
product p
INNERJOIN productdir pd
INNERJOIN product_stock ps ON p.dir_id = pd.id
AND p.id = ps.product_id ORDERBY lr DESC-- 外链接-- 左连接 LEFT JOINSELECT*FROM employee INNERJOIN department ON employee.deptid=department.id;-- 内连接SELECT*FROM employee LEFTJOIN department ON employee.deptid=department.id;-- 左连接-- 右连接 RIGHT JOIN SELECT*FROM employee rightJOIN department ON employee.deptid=department.id;-- 右链接-- 总结 内连接 左连接 外连接 的区别
内连接 多表连表查询时, 只显示他们数据有关联的部分
左连接 多表左连接查询时, 按照左表为标准,显示左边所有的数据和右表中与左表有关系的数据
右连接 多表右连接查询时, 按照右表为标准,显示右边所有的数据和左表中与右表有关系的数据
-- 查漏补缺-- 等值连接 (A表的外键名 和B表的外键名一致) USINGSELECT*FROM employee JOIN department ON employee.deptid=department.deptid;-- 原来的写法SELECT*FROM employee JOIN department USING(deptid)-- OUTER JOIN-- 自链接SELECT p2.*, p.dirName FROM productdir AS p JOIN productdir AS p2 ON p.id=p2.parent_id ;-- 练习 把省 市 区 展示出来-- 子查询-- 查询零售价比罗技MX1100更高的所有商品信息。SELECT*from product where salePrice >(SELECT salePrice FROM product WHERE productName='罗技MX1100')-- 子查询 -- 单行 多列子查询
需求: 查询分类编号和折扣与罗技M100相同的所有商品信息。
SELECT*FROM product
WHERE(dir_id,cutoff)=(SELECT dir_id,cutoff FROM product WHERE productName ='罗技M100')-- 我们真实开发中 要避免过多连表查询 。()-- 上面全是关于查询的----- DQL-- 下面我们要讲 ---- DML 增 删 改-- 增加 INSERTinto 表名(列名1,列名2,...)values(值1,值2,.....)-- 写法一INSERTINTO employee(id,name,deptid)VALUES(6,'明锋',3);INSERTINTO employee VALUES(7,'明锋',3);-- 写法二 如果我里面每一字段都有值表后面可以省略字段 INSERTINTO employee(name,deptid)VALUES('明锋',3);-- 写法三 如果列满可以省略前面的列名-- 批量增加 INSERTINTO employee(name,deptid)VALUES('明锋',3),('xxx',4),('xxx2',5);INSERTINTO employee (SELECT*FROM employee)-- 把当前表的数据查询出来在插入就当前表INSERTINTO employee(name,deptid)(SELECT name,deptid FROM employee)-- 把当前表的数据查询出来在插入就当前表-- 删除数据 DELETEFROM 表名 WHERE id=? -- 删除一条数据DELETEFROM 表名 -- 删除全部数据-- 删除多条数据DELETEfrom employee WHERE id in(2,3);-- 这种写法DELETEfrom employee where id BETWEEN4AND9DELETEfrom employee where id<=12-- 数据的修改UPDATE 表名 SET 列名=值 , 列名2=值 -- 修改全部UPDATE 表名 SET 列名=值 , 列名2=值 where id=? -- 按id来修改UPDATE employee SET name='小困困',deptid=3WHERE id=8180UPDATE employee SET name='阮经天',deptid=3-- 指定id批量修改 -- 自己去研究(难)UPDATE employee SET name='小困困',deptid=3WHERE id in(8180,8181,8182)-- 修改指定的id的内容-- 这里你们要求研究一下 扩展 -- 特难 -- 函数 -- castSELECT CAST('1234.8678'AS SIGNED)--转 整型SELECT CAST(deptid AS SIGNED)AS id,deptName FROM department -- 把字符串转成整形SELECT CAST('1234.8678'ASdecimal)-- 装decimalSELECT CAST('1234.8678'ASdecimal(6,2))-- 装decimal-- ifnullSELECT id,productName,dir_id,IFNULL(salePrice,0)AS salePrice FROM product
SELECT salePrice FROM product WHERE productName='罗技MX1100'SELECT*from product where salePrice >(SELECT*from haha)3NF
1 列不可分割
练习
索引可以加快数据检索操作,但会使数据修改操作变慢
1.普通索引
这是最基本的索引,它没有任何限制
增加索引
CREATEINDEX indexName ON student(username(100));
修改索引
ALTERtable tableName ADDINDEX student(username(100))
删除索引
DROPINDEX[indexName]ON student;2,唯一索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
CREATEUNIQUEINDEX indexName ON student(username(100))ALTERtable studen ADDUNIQUE[indexName](username(length))3,主键索引
ALTERTABLE tbl_name ADDPRIMARYKEY(userid)4,全文索引
ALTERTABLE tbl_name ADD FULLTEXT index_name (username)
进货表,销量表,库存表,
库存来自进货,销量影响库存,库存也影响进货决策
进货表:编号,供应商编号,进货时间,操作员,数量,商品编号;
销售表:编号,客户编号,销售时间,操作员,数量,商品编号;
库存表:编号,商品编号,数量;
增加
INSERTinto 表名(列名1,列名2,...)values(值1,值2,.....)INSERTINTO employee(id,name,deptid)VALUES(6,'明锋',3);-- 写法一INSERTINTO employee VALUES(7,'明锋',3);-- 写法二INSERTINTO employee(name,deptid)VALUES('明锋',3);
批量插入
INSERTINTO employee(name,deptid)VALUES('明锋',3),('xxx',4),('xxx2',5);INSERTINTO employee (SELECT*FROM employee)-- 把当前表的数据查询出来在插入就当前表INSERTINTO employee(name,deptid)(SELECT name,deptid FROM employee)-- 把当前表的数据查询出来在插入就当前表
删除数据
DELETEFROM 表名 WHERE id=? -- 删除一条数据DELETEFROM 表名 -- 删除全部数据
删除多条数据
DELETEfrom employee WHERE id in(2,3);-- 这种写法DELETEfrom employee where id BETWEEN4AND9DELETEfrom employee where id<=12
数据的修改
UPDATE 表名 SET 列名=值 , 列名2=值 -- 修改全部UPDATE 表名 SET 列名=值 , 列名2=值 where id=? -- 按id来修改UPDATE employee SET name='小困困',deptid=3WHERE id=8180UPDATE employee SET name='阮经天',deptid=3
增加
INSERTinto 表名(列名1,列名2,...)values(值1,值2,.....)INSERTINTO employee(id,name,deptid)VALUES(6,'明锋',3);-- 写法一INSERTINTO employee VALUES(7,'明锋',3);-- 写法二INSERTINTO employee(name,deptid)VALUES('明锋',3);
批量插入
INSERTINTO employee(name,deptid)VALUES('明锋',3),('xxx',4),('xxx2',5);INSERTINTO employee (SELECT*FROM employee)-- 把当前表的数据查询出来在插入就当前表INSERTINTO employee(name,deptid)(SELECT name,deptid FROM employee)-- 把当前表的数据查询出来在插入就当前表
删除数据
DELETEFROM 表名 WHERE id=? -- 删除一条数据DELETEFROM 表名 -- 删除全部数据
删除多条数据
DELETEfrom employee WHERE id in(2,3);-- 这种写法DELETEfrom employee where id BETWEEN4AND9DELETEfrom employee where id<=12
数据的修改
UPDATE 表名 SET 列名=值 , 列名2=值 -- 修改全部UPDATE 表名 SET 列名=值 , 列名2=值 where id=? -- 按id来修改UPDATE employee SET name='小困困',deptid=3WHERE id=8180UPDATE employee SET name='阮经天',deptid=3
增加
INSERTinto 表名(列名1,列名2,...)values(值1,值2,.....)INSERTINTO employee(id,name,deptid)VALUES(6,'明锋',3);-- 写法一INSERTINTO employee VALUES(7,'明锋',3);-- 写法二INSERTINTO employee(name,deptid)VALUES('明锋',3);
批量插入
INSERTINTO employee(name,deptid)VALUES('明锋',3),('xxx',4),('xxx2',5);INSERTINTO employee (SELECT*FROM employee)-- 把当前表的数据查询出来在插入就当前表INSERTINTO employee(name,deptid)(SELECT name,deptid FROM employee)-- 把当前表的数据查询出来在插入就当前表
删除数据
DELETEFROM 表名 WHERE id=? -- 删除一条数据DELETEFROM 表名 -- 删除全部数据
删除多条数据
DELETEfrom employee WHERE id in(2,3);-- 这种写法DELETEfrom employee where id BETWEEN4AND9DELETEfrom employee where id<=12
数据的修改
UPDATE 表名 SET 列名=值 , 列名2=值 -- 修改全部UPDATE 表名 SET 列名=值 , 列名2=值 where id=? -- 按id来修改UPDATE employee SET name='小困困',deptid=3WHERE id=8180UPDATE employee SET name='阮经天',deptid=3
增加
INSERTinto 表名(列名1,列名2,...)values(值1,值2,.....)INSERTINTO employee(id,name,deptid)VALUES(6,'明锋',3);-- 写法一INSERTINTO employee VALUES(7,'明锋',3);-- 写法二INSERTINTO employee(name,deptid)VALUES('明锋',3);
批量插入
INSERTINTO employee(name,deptid)VALUES('明锋',3),('xxx',4),('xxx2',5);INSERTINTO employee (SELECT*FROM employee)-- 把当前表的数据查询出来在插入就当前表INSERTINTO employee(name,deptid)(SELECT name,deptid FROM employee)-- 把当前表的数据查询出来在插入就当前表
删除数据
DELETEFROM 表名 WHERE id=? -- 删除一条数据DELETEFROM 表名 -- 删除全部数据
删除多条数据
DELETEfrom employee WHERE id in(2,3);-- 这种写法DELETEfrom employee where id BETWEEN4AND9DELETEfrom employee where id<=12
数据的修改
UPDATE 表名 SET 列名=值 , 列名2=值 -- 修改全部UPDATE 表名 SET 列名=值 , 列名2=值 where id=? -- 按id来修改UPDATE employee SET name='小困困',deptid=3WHERE id=8180UPDATE employee SET name='阮经天',deptid=3
增加
INSERTinto 表名(列名1,列名2,...)values(值1,值2,.....)INSERTINTO employee(id,name,deptid)VALUES(6,'明锋',3);-- 写法一INSERTINTO employee VALUES(7,'明锋',3);-- 写法二INSERTINTO employee(name,deptid)VALUES('明锋',3);
批量插入
INSERTINTO employee(name,deptid)VALUES('明锋',3),('xxx',4),('xxx2',5);INSERTINTO employee (SELECT*FROM employee)-- 把当前表的数据查询出来在插入就当前表INSERTINTO employee(name,deptid)(SELECT name,deptid FROM employee)-- 把当前表的数据查询出来在插入就当前表
删除数据
DELETEFROM 表名 WHERE id=? -- 删除一条数据DELETEFROM 表名 -- 删除全部数据
删除多条数据
DELETEfrom employee WHERE id in(2,3);-- 这种写法DELETEfrom employee where id BETWEEN4AND9DELETEfrom employee where id<=12
数据的修改
UPDATE 表名 SET 列名=值 , 列名2=值 -- 修改全部UPDATE 表名 SET 列名=值 , 列名2=值 where id=? -- 按id来修改UPDATE employee SET name='小困困',deptid=3WHERE id=8180UPDATE employee SET name='阮经天',deptid=3
数据库第一第二天复习
-- day1-- DBAS DBMS DB-- sql-- show DATABASES 展示数据库-- use 数据库名-- show TABLES 查看表 -- 查询语句 (-- SELECT 列名1, 列名2,或 * from 表名 where 条件1 AND (or) 条件2-- like (%匹配零个或多个 _ 匹配一个) -- order by DESC(降序) ASC(升序) -- LIMIT ?,? (第一个问好代表 查询的起点位置零开始 ,第二个问号每次查询的条数)-- BETWEEN 最小值 AND 最大值 区间查询 查询在最小值和最大值 之间的-- GROUP BY 分组 HAVING -- IN (值1,值2) 查询条件匹配我括号中的值,-- max min avg count sum -- 存储引擎 myisam innodb memory
myisam 无事物 表锁
innodb 有事物 行锁
memory 无事物 表锁 不入库 )-- 外键 -- 主键
自然主键 代理主键
-- java 和mysql 对应的数据类型-- NOT ==================day2================-- 多表查询 SELECT*FROM 表名 ,表名 WHERE 表名1.id=表名2.表一的外键 --隐私内连接SELECT*FROM 表名 INNERJOIN 表名 on 表名1.id=表名2.表一的外键 --显示内连接SELECT*FROM 表名 LEFTJOINJOIN 表名 on 表名1.id=表名2.表一的外键 --左连接SELECT*FROM 表名 RIGHTJOINJOIN 表名 on 表名1.id=表名2.表一的外键 --右连接
内连接 取多表的交集
左连接 包含左表和右表的公共部分
右连接 包含右表和左表的公共部分
前面 全是 DQL 查询
-- DML 增 删 改
增
INSERTINTO 表名(列名1,列名2...)values(?,?...);INSERTINTO 表名(列名1.列名2..)VALUES(?,?...),(?,?...);-- 一次插入多条数据INSERTINTO 表名(列名1.列名2..)(SELECT 列名1.列名2..FROM 表名);INSERTINTO 表名(列名1.列名2..)SELECT 列名1.列名2..FROM 表名
INSERTINTO 表名 VALUES(?,?,?) 这个列名的值要全写.
删
DELETEFROM 表 where 条件
改
UPDATE 表名 SET 列名=值,列名2=值 where 条件
update studet set name=王小川,set password=1234where id=2