SQL语句示例

mysqlDay1-下午

-- 上午的总结
  1,DBAS -> DBMS ->DB -> table(关系) 
  2, 数据库操作语言
     show DATABASES -- 查看DBMS(mysql)里面所有的数据库
     -- 对数据库的超出
    CREATE DATABASE  数据库名;   -- 创建数据库
    DROP   DATABASE  数据库;   -- 删除数据库
    USE  数据库的名称  -- 使用当前数据库
      -- 对表的操作
       SHOW TABLES; -- 查询表
      CREATE TABLE  表名(
         id int(数据的长度),
         name VARCHAR(长度)   -- 结尾不用逗号
     ); -- 创建表
    DROP TABLE 表名; -- 删除表
	
-- java类型对应 数据库的类型
   Long  ->bigint
   String -> charVARCHAR 
   bigdecimal  -> DECIMAL
   Boolean  ->  bit
   
-- 表的约束   ctrl+D 设置表(快捷键)
    1.主键  (非空且唯一) 
       单列主键 
       复合主键
    ------------------
   自然主键  这个字段可能在我的软件中和业务有关系
   代理主键   和业务没有关系  --  推荐使用 id
    2.非空
    3.唯一
    4.自动递增
    5.默认值

-- 对表里数据的CRUD    ------- 下午-------------------------- 

  1,导入数据 

-- 对表的查看 - 数据库查询语句
	SELECT 列名1,列名2,列名3,...(*) FROM 表名(视图 子查询)-->数据源; -- 不建议写 * (效率慢) 数据库优化方法
	SELECT * FROM product;  
 
    -- 查询所有货品(product) 信息
	SELECT * FROM product;

    -- 查询所有货品的id,productName,salePrice
	SELECT id,productName,salePrice  FROM product;

-- 消除重复的数据
	SELECT DISTINCT  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.00
	SELECT CONCAT(productName,'商品的零售价为:',salePrice) AS productSalePrice FROM product;

-- 过滤查询 比较运算符 ------------- 公式
	SELECT 列名1,列名2,... FROM 表名  WHERE  条件;  单条件
	SELECT 列名1,列名2,... FROM 表名  WHERE  条件1 AND 条件2;  多条件  AND () 
	SELECT 列名1,列名2,... FROM 表名  WHERE  条件1 OR 条件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 

-- 字符串大小写的区分 BINARY
	SELECT * FROM product WHERE  BINARY productName='罗技g9x'


-- 逻辑运算  and or NOT(....)
	-- 选择id,货品名称,批发价在300-400之间的货品
    SELECT id,productName, salePrice*cutoff as pfj from product where salePrice*cutoff>=300 and  salePrice*cutoff<=400   
	-- 选择id,货品名称,分类编号为2,4的所有货品
	SELECT id,productName ,dir_id FROM product where dir_id=2 OR dir_id=4;
	-- 选择id,货品名词,分类编号不为2的所有商品
	SELECT id, productName ,dir_id FROM product where dir_id != 2;
	-- 选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200
	select id,productName ,dir_id ,salePrice,costPrice from product where salePrice>=250 OR costPrice>=200;

	SELECT 列名1,列名2,... FROM 表名 WHERE 条件;  单条件

	select 列名1,列名2,... from 表名 where 条件1 and (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>=300 AND salePrice*cutoff<=400; -- 没有用between and 的写法
	SELECT id,productName,salePrice*cutoff pfj FROM product WHERE salePrice*cutoff between 300 AND 400; -- 用between and 的写法

	-- 选择id,货品名称,批发价不在300-400之间的货品
	SELECT id,productName,salePrice*cutoff pfj FROM product WHERE salePrice*cutoff NOT between 300 AND 400;  -- not 的使用

-- 集合查询  in
	SELECT 列名1,列名2 (*) FROM 表名 WHERE 列名 in(1,2,)
   
	-- 选择id,货品名称,分类编号为2,4的所有货品
	SELECT * FROM product where dir_id=2 or dir_id=4; -- 不要in的写法
	SELECT * FROM product where dir_id IN(2,4); -- 用in的写法

	-- 选择id,货品名称,分类编号不为2,4的所有货品
	SELECT * FROM product where dir_id NOT IN(2,4);
	
-- 空值查询
	-- 查询商品名为NULL的所有商品信息
	SELECT * FROM product where productName  is  null -- 为空 

	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>200 AND 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 ORDER BY salePrice  DESC  -- DESC 降序
    SELECT id,productName,dir_id,salePrice FROM product ORDER BY salePrice   -- ORDER BY 默认 是 ASC
     
	-- 选择id,货品名称,分类编号,零售价先按分类编号排序,再按零售价排序 
    SELECT id,productName,dir_id,salePrice FROM product ORDER BY dir_id, salePrice

	-- 查询M系列并按照批发价排序(加上别名)
	SELECT  *, salePrice*cutoff pfj FROM product WHERE productName like '%M%' ORDER BY pfj
     SQL 的执行顺序  (面试题)    
     from-> where -> SELECT -> ORDER BY
	 
	-- 查询分类为2并按照批发价排序(加上别名)      
	SELECT  *, salePrice*cutoff pfj FROM product WHERE dir_id=2 ORDER BY  pfj
     
--  分页查询 LIMIT  (重点 慢慢来掌握)
    逻辑分页-- 一次性全部查出来 ,然后把数据交给浏览器,让浏览器自己去分页
    SELECT * from product
    物理分页-- 推荐   不一次查询完   LIMIT 
	SELECT * FROM product limit ?,?  --  第一个?代表从哪一个开始查,第二个?代表查询多少条
    SELECT * FROM product limit 0,5  --  第一页
    SELECT * FROM product limit 5,5  --  第二页
--------------------------------------------------------------
   每页展示五条数据
   10,5        (1-1)*5=0
   25,5        (2-1)*5=5
   310,5       (3-1)*5=10
   4    15,5       (4-1)*5=15
 ................. (n-1)*5

-- 聚集函数
	-- 查询所有商品平均零售价
	SELECT AVG(salePrice) FROM product;
	-- 查询商品总记录数(注意在Java中必须使用long接收)
	SELECT COUNT(1) FROM product; -- 统计
	-- 查询分类为2的商品总数
	SELECT COUNT(1) FROM product WHERE dir_id =2
	-- 查询商品的最小零售价,最高零售价,以及所有商品零售价总和
	SELECT MIN(salePrice), MAX(salePrice),SUM(salePrice) FROM product;

-- 分组查询 GROUP BY  (稍难的)
	-- 查询每个商品分类编号和每个商品分类各自的平均零售价
	SELECT AVG(salePrice) FROM product  GROUP BY dir_id
	-- 查询每个商品分类编号和每个商品分类各自的商品总数。
	SELECT  count(*),dir_id  FROM product  GROUP BY dir_id
	-- 查询每个商品分类编号和每个商品分类中零售价大于100的商品总数:
	SELECT  count(*),dir_id FROM product WHERE salePrice>100 GROUP BY dir_id 
	-- 查询零售价总和大于1800的商品分类编号以及总零售价和:
	SELECT   sum(salePrice) ,dir_id FROM product  GROUP BY dir_id HAVING sum(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 GROUP BY 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!=2 GROUP BY 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)>=300 AND (salePrice*cutoff)<=400;
需求: 查询id,货品名称,分类编号为2,4的所有货品
SELECT id,productName,dir_id FROM product WHERE dir_id=2 OR dir_id=4;
需求: 查询id,货品名词,分类编号不为2的所有商品
SELECT id,productName ,dir_id FROM product WHERE dir_id!=2 GROUP BY dir_id;
需求: 选择id,货品名称,分类编号的货品零售价大于等于250或者是成本大于等于200
SELECT id,productName,dir_id,salePrice,costPrice FROM product WHERE salePrice>=250 OR costPrice>=200 GROUP BY dir_id;
需求: 查询id,货品名称,批发价在300-400之间的货品(使用between)
SELECT id,productName,(salePrice*cutoff) AS 批发价 FROM product WHERE (salePrice*cutoff) BETWEEN 300 AND 400;
需求: 查询id,货品名称,批发价不在300-400之间的货品
SELECT id,productName,(salePrice*cutoff) AS 批发价 FROM product WHERE (salePrice*cutoff) NOT BETWEEN 300 AND 400;
需求: 查询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 NOT IN(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>=200 AND productName LIKE '%罗技%';
需求: 查询id,货品名称,分类编号,零售价并且按零售价降序排序
SELECT id,productName,dir_id,salePrice FROM product ORDER BY salePrice ASC;
需求: 查询id,货品名称,分类编号,零售价先按分类编号排序,再按零售价排序
SELECT id,productName,dir_id,salePrice FROM product ORDER BY dir_id ,salePrice;
需求: 查询M系列并按照批发价排序(加上别名)
SELECT productName,salePrice*cutoff AS 批发价 FROM product WHERE productName LIKE '%M%' ORDER BY 批发价;
需求: 查询分类为2并按照批发价排序(加上别名)
SELECT dir_id,salePrice*cutoff AS 批发价 FROM product WHERE dir_id =2 ORDER BY 批发价;
需求:分页查询
每页最多3条记录: pageSize = 3:
SELECT * FROM product LIMIT 0,3;
SELECT * FROM product LIMIT 3,3;
SELECT * FROM product LIMIT 6,3;
SELECT * FROM product LIMIT 9,3;
SELECT * FROM product LIMIT 12,3;
SELECT * FROM product LIMIT 15,3;
SELECT * FROM product LIMIT 18,3;
SELECT * FROM product LIMIT (n-1)*3,3;
需求: 查询所有商品平均零售价
SELECT AVG(salePrice) AS 平均零售价 from product;
需求: 查询商品总记录数(注意在Java中必须使用long接收)
SELECT COUNT(1) FROM product;
需求: 查询分类为2的商品总数
SELECT COUNT(1),dir_id FROM product WHERE dir_id = 2;
需求: 查询商品的最小零售价,最高零售价,以及所有商品零售价总和
SELECT MIN(salePrice),MAX(salePrice),SUM(salePrice) FROM product;
需求: 查询每个商品分类编号和每个商品分类各自的平均零售价
SELECT AVG(salePrice),dir_id FROM product GROUP BY dir_id;
需求: 查询每个商品分类编号和每个商品分类各自的商品总数。
SELECT COUNT(dir_id),dir_id FROM product GROUP BY dir_id;
需求: 查询每个商品分类编号和每个商品分类中零售价大于100的商品总数:
SELECT dir_id,COUNT(salePrice) FROM product WHERE salePrice>100 GROUP BY  dir_id;
需求: 查询零售价总和大于1500的商品分类编号以及总零售价和:
SELECT SUM(salePrice) FROM product GROUP BY dir_id  HAVING SUM(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 INNER JOIN 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  INNER JOIN productdir ON product.dir_id=productdir.id
	-- 查询零售价大于200的无线鼠标
    SELECT * FROM product AS p INNER JOIN productdir AS pd  ON p.dir_id=pd.id AND p.salePrice>200 AND pd.dirName='无线鼠标'
	-- 查询零售价大于200的无线鼠标(使用表的别名)
    SELECT * FROM product AS p INNER JOIN productdir AS pd  ON p.dir_id=pd.id AND p.salePrice>200 AND pd.dirName='无线鼠标'
	-- 查询每个货品对应的分类以及对应的库存
    SELECT p.*, pd.dirName, ps.store_num FROM product p INNER JOIN productdir  pd INNER JOIN 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
INNER JOIN productdir pd
INNER JOIN product_stock ps ON p.dir_id = pd.id
AND p.id = ps.product_id ORDER BY lr DESC
               
-- 外链接
  -- 左连接  LEFT JOIN
 SELECT * FROM employee INNER JOIN department ON employee.deptid=department.id;  -- 内连接
 SELECT * FROM employee LEFT  JOIN department ON employee.deptid=department.id; -- 左连接
  -- 右连接  RIGHT JOIN 
 SELECT * FROM employee right  JOIN department ON employee.deptid=department.id; -- 右链接

-- 总结  内连接 左连接 外连接 的区别
  内连接  多表连表查询时, 只显示他们数据有关联的部分
  左连接  多表左连接查询时,  按照左表为标准,显示左边所有的数据和右表中与左表有关系的数据
  右连接  多表右连接查询时,  按照右表为标准,显示右边所有的数据和左表中与右表有关系的数据

-- 查漏补缺
   -- 等值连接  (A表的外键名 和B表的外键名一致)  USING
 SELECT * 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 增 删  改
-- 增加 
  INSERT into 表名(列名1,列名2...) values(1,2,.....) -- 写法一

  INSERT INTO employee(id,name,deptid) VALUES(6,'明锋',3); 

  INSERT INTO employee VALUES(7,'明锋',3); -- 写法二  如果我里面每一字段都有值表后面可以省略字段 
    
  INSERT INTO employee(name,deptid) VALUES('明锋',3);  -- 写法三  如果列满可以省略前面的列名
-- 批量增加 
  INSERT INTO employee(name,deptid) VALUES('明锋',3),('xxx',4),('xxx2',5); 

  INSERT INTO employee (SELECT * FROM employee)  -- 把当前表的数据查询出来在插入就当前表
  
  INSERT INTO employee(name,deptid) (SELECT name,deptid FROM employee)  -- 把当前表的数据查询出来在插入就当前表
 
-- 删除数据 
  DELETE FROM 表名  WHERE id=? -- 删除一条数据

  DELETE FROM 表名   -- 删除全部数据
 
--     删除多条数据
  DELETE from employee WHERE id in(2,3); -- 这种写法

  DELETE from employee where id BETWEEN 4 AND 9 

  DELETE from employee where id<=12
-- 数据的修改
   UPDATE 表名 SET 列名=, 列名2=-- 修改全部
   UPDATE 表名  SET 列名=, 列名2=where id=-- 按id来修改


   UPDATE employee SET name='小困困',deptid=3 WHERE id=8180
   
   UPDATE employee SET name='阮经天',deptid=3
 -- 指定id批量修改  -- 自己去研究(难)
   UPDATE employee SET name='小困困',deptid=3 WHERE id in (8180,8181,8182) -- 修改指定的id的内容
-- 这里你们要求研究一下   扩展  -- 特难 

  
-- 函数 

  -- cast

  SELECT CAST('1234.8678' AS SIGNED) --转 整型

  SELECT  CAST(deptid AS SIGNED) AS id,deptName FROM department  -- 把字符串转成整形


  SELECT CAST('1234.8678' AS decimal)  -- 装decimal

  SELECT CAST('1234.8678' AS decimal(6,2))  -- 装decimal

  --  ifnull

  SELECT 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.普通索引
 这是最基本的索引,它没有任何限制
     增加索引
     CREATE INDEX indexName ON student(username(100)); 
     修改索引
     ALTER table tableName ADD INDEX student(username(100))
     删除索引
     DROP INDEX [indexName] ON student; 
2,唯一索引
   它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
     CREATE UNIQUE INDEX indexName ON student(username(100)) 
     ALTER table studen ADD UNIQUE [indexName] (username(length))
3,主键索引
   ALTER TABLE tbl_name ADD PRIMARY KEY (userid)
4,全文索引
 ALTER TABLE tbl_name ADD FULLTEXT index_name (username)

 进货表,销量表,库存表,
 库存来自进货,销量影响库存,库存也影响进货决策
 进货表:编号,供应商编号,进货时间,操作员,数量,商品编号;
 销售表:编号,客户编号,销售时间,操作员,数量,商品编号;
 库存表:编号,商品编号,数量;
 
增加 
  INSERT into 表名(列名1,列名2...) values(1,2,.....)
  INSERT INTO employee(id,name,deptid) VALUES(6,'明锋',3); -- 写法一
  INSERT INTO employee VALUES(7,'明锋',3); -- 写法二
  INSERT INTO employee(name,deptid) VALUES('明锋',3);  
批量插入 
  INSERT INTO employee(name,deptid) VALUES('明锋',3),('xxx',4),('xxx2',5); 
  INSERT INTO employee (SELECT * FROM employee)  -- 把当前表的数据查询出来在插入就当前表
  INSERT INTO employee(name,deptid) (SELECT name,deptid FROM employee)  -- 把当前表的数据查询出来在插入就当前表
 
删除数据 
  DELETE FROM 表名  WHERE id=? -- 删除一条数据
  DELETE FROM 表名   -- 删除全部数据
 
删除多条数据
  DELETE from employee WHERE id in(2,3); -- 这种写法
  DELETE from employee where id BETWEEN 4 AND 9 
  DELETE from employee where id<=12
  
数据的修改
   UPDATE 表名 SET 列名=, 列名2=-- 修改全部
   UPDATE 表名  SET 列名=, 列名2=where id=-- 按id来修改
   UPDATE employee SET name='小困困',deptid=3 WHERE id=8180
   UPDATE employee SET name='阮经天',deptid=3
   
   
   增加 
  INSERT into 表名(列名1,列名2...) values(1,2,.....)
  INSERT INTO employee(id,name,deptid) VALUES(6,'明锋',3); -- 写法一
  INSERT INTO employee VALUES(7,'明锋',3); -- 写法二
  INSERT INTO employee(name,deptid) VALUES('明锋',3);  
批量插入 
  INSERT INTO employee(name,deptid) VALUES('明锋',3),('xxx',4),('xxx2',5); 
  INSERT INTO employee (SELECT * FROM employee)  -- 把当前表的数据查询出来在插入就当前表
  INSERT INTO employee(name,deptid) (SELECT name,deptid FROM employee)  -- 把当前表的数据查询出来在插入就当前表
 
删除数据 
  DELETE FROM 表名  WHERE id=? -- 删除一条数据
  DELETE FROM 表名   -- 删除全部数据
 
删除多条数据
  DELETE from employee WHERE id in(2,3); -- 这种写法
  DELETE from employee where id BETWEEN 4 AND 9 
  DELETE from employee where id<=12
  
数据的修改
   UPDATE 表名 SET 列名=, 列名2=-- 修改全部
   UPDATE 表名  SET 列名=, 列名2=where id=-- 按id来修改
   UPDATE employee SET name='小困困',deptid=3 WHERE id=8180
   UPDATE employee SET name='阮经天',deptid=3
   
   增加 
  INSERT into 表名(列名1,列名2...) values(1,2,.....)
  INSERT INTO employee(id,name,deptid) VALUES(6,'明锋',3); -- 写法一
  INSERT INTO employee VALUES(7,'明锋',3); -- 写法二
  INSERT INTO employee(name,deptid) VALUES('明锋',3);  
批量插入 
  INSERT INTO employee(name,deptid) VALUES('明锋',3),('xxx',4),('xxx2',5); 
  INSERT INTO employee (SELECT * FROM employee)  -- 把当前表的数据查询出来在插入就当前表
  INSERT INTO employee(name,deptid) (SELECT name,deptid FROM employee)  -- 把当前表的数据查询出来在插入就当前表
 
删除数据 
  DELETE FROM 表名  WHERE id=? -- 删除一条数据
  DELETE FROM 表名   -- 删除全部数据
 
删除多条数据
  DELETE from employee WHERE id in(2,3); -- 这种写法
  DELETE from employee where id BETWEEN 4 AND 9 
  DELETE from employee where id<=12
  
数据的修改
   UPDATE 表名 SET 列名=, 列名2=-- 修改全部
   UPDATE 表名  SET 列名=, 列名2=where id=-- 按id来修改
   UPDATE employee SET name='小困困',deptid=3 WHERE id=8180
   UPDATE employee SET name='阮经天',deptid=3
   
   增加 
  INSERT into 表名(列名1,列名2...) values(1,2,.....)
  INSERT INTO employee(id,name,deptid) VALUES(6,'明锋',3); -- 写法一
  INSERT INTO employee VALUES(7,'明锋',3); -- 写法二
  INSERT INTO employee(name,deptid) VALUES('明锋',3);  
批量插入 
  INSERT INTO employee(name,deptid) VALUES('明锋',3),('xxx',4),('xxx2',5); 
  INSERT INTO employee (SELECT * FROM employee)  -- 把当前表的数据查询出来在插入就当前表
  INSERT INTO employee(name,deptid) (SELECT name,deptid FROM employee)  -- 把当前表的数据查询出来在插入就当前表
 
删除数据 
  DELETE FROM 表名  WHERE id=? -- 删除一条数据
  DELETE FROM 表名   -- 删除全部数据
 
删除多条数据
  DELETE from employee WHERE id in(2,3); -- 这种写法
  DELETE from employee where id BETWEEN 4 AND 9 
  DELETE from employee where id<=12
  
数据的修改
   UPDATE 表名 SET 列名=, 列名2=-- 修改全部
   UPDATE 表名  SET 列名=, 列名2=where id=-- 按id来修改
   UPDATE employee SET name='小困困',deptid=3 WHERE id=8180
   UPDATE employee SET name='阮经天',deptid=3
   
   增加 
  INSERT into 表名(列名1,列名2...) values(1,2,.....)
  INSERT INTO employee(id,name,deptid) VALUES(6,'明锋',3); -- 写法一
  INSERT INTO employee VALUES(7,'明锋',3); -- 写法二
  INSERT INTO employee(name,deptid) VALUES('明锋',3);  
批量插入 
  INSERT INTO employee(name,deptid) VALUES('明锋',3),('xxx',4),('xxx2',5); 
  INSERT INTO employee (SELECT * FROM employee)  -- 把当前表的数据查询出来在插入就当前表
  INSERT INTO employee(name,deptid) (SELECT name,deptid FROM employee)  -- 把当前表的数据查询出来在插入就当前表
 
删除数据 
  DELETE FROM 表名  WHERE id=? -- 删除一条数据
  DELETE FROM 表名   -- 删除全部数据
 
删除多条数据
  DELETE from employee WHERE id in(2,3); -- 这种写法
  DELETE from employee where id BETWEEN 4 AND 9 
  DELETE from employee where id<=12
  
数据的修改
   UPDATE 表名 SET 列名=, 列名2=-- 修改全部
   UPDATE 表名  SET 列名=, 列名2=where id=-- 按id来修改
   UPDATE employee SET name='小困困',deptid=3 WHERE id=8180
   UPDATE 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  表名 INNER JOIN 表名 on 表名1.id=表名2.表一的外键  --显示内连接

SELECT * FROM  表名 LEFT JOIN JOIN 表名 on 表名1.id=表名2.表一的外键  --左连接
 
SELECT * FROM  表名 RIGHT  JOIN JOIN 表名 on 表名1.id=表名2.表一的外键  --右连接
 
内连接   取多表的交集

左连接    包含左表和右表的公共部分

右连接    包含右表和左表的公共部分

前面 全是  DQL 查询

--     DML 增  删  改  INSERT INTO 表名(列名1,列名2...) values(?,?...);

INSERT INTO 表名(列名1.列名2..) VALUES(?,?...),(?,?...);-- 一次插入多条数据

INSERT INTO 表名(列名1.列名2..) (SELECT 列名1.列名2.. FROM 表名);

INSERT INTO 表名(列名1.列名2..) SELECT 列名1.列名2.. FROM 表名

INSERT INTO 表名    VALUES(?,?,?) 这个列名的值要全写.DELETE  FROMwhere 条件

改
UPDATE  表名 SET 列名=,列名2=where 条件

update studet set name=王小川,set password=1234 where id=2

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值