Mysql千万級データ照会まとめ

3689 ワード

CREATE TABLE `mall_goods` (
  `goods_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '  ID',
  `cat_id` INT(11) NOT NULL DEFAULT '0' COMMENT '  id',
  `price` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '    ',
  `state` TINYINT(3) DEFAULT '1' COMMENT '  (1:  ,0:  )',
  PRIMARY KEY (`goods_id`),
  KEY `icatid` (`cat_id`)
) ENGINE=INNODB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8
CREATE TABLE `mall_category` (
  `cat_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '  id',
  `cat_name` VARCHAR(50) DEFAULT NULL COMMENT '  ',
  PRIMARY KEY (`cat_id`)
) ENGINE=INNODB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8

クエリの5種類の文
where(    )、having(  )、group by(  )、order by(  )、limit(    )
 1. where 
			      
                > ,  < ,=  , != (< >),>= , <=  
                in(v1,v2..vn)  
                between v1 and v2     v1 v2  (  v1,v2)
                IS NULL:       NULL,       true。
				IS NOT NULL:        NULL,       true。
				<=>:      (   =   ),          NULL     true。
                 
                not ( ! )     
                or ( || )     
                and ( && )     
                

 2. group by      (    )       
	#         
	SELECT a.goods_id, a.cat_id, MAX(a.price) AS price, a.state FROM mall_goods AS a GROUP BY a.cat_id 
	#      
	SELECT a.goods_id, a.cat_id, MIN(a.price) AS price, a.state FROM mall_goods AS a GROUP BY a.cat_id
	#        
	SELECT a.goods_id, a.cat_id, SUM(a.price) AS price, a.state FROM mall_goods AS a GROUP BY a.cat_id
	#       
	SELECT a.goods_id, a.cat_id, AVG(a.price) AS price, a.state FROM mall_goods AS a GROUP BY a.cat_id
	#         
	SELECT a.goods_id, a.cat_id, COUNT(a.price) AS price, a.state FROM mall_goods AS a GROUP BY a.cat_id 
 3. having where  ,      ,where        ,having     where          ,    having            ,   ,having group by  ,having       。
    #      95   
	SELECT a.goods_id,a.cat_id,a.price,a.state FROM mall_goods AS a HAVING a.price>95
	      。。。
 4. order by      ,desc     ,asc    ,     。
 5. limit x,n

mysqlサブクエリ
 1. where    
	  #  order by        
	  SELECT  a.goods_id,a.cat_id,a.price,a.state FROM mall_goods AS a WHERE a.goods_id = (SELECT MAX(goods_id) FROM mall_goods);
	  #  order by            
	  select a.goods_id,a.cat_id,a.price,a.state FROM mall_goods AS a where a.goods_id in (select max(goods_id) from mall_goods group by cat_id);
 2. from    (               )
		#              。
		#  1
			SELECT a.goods_id,a.cat_id,a.price,a.state FROM mall_goods AS a 
			WHERE (SELECT COUNT(b.goods_id) FROM mall_goods AS b WHERE b.cat_id = a.cat_id AND b.price > a.price  ) <2 
			ORDER BY a.cat_id,a.price DESC;
		#  2
			SELECT a.goods_id,a.cat_id,a.price,a.state FROM mall_goods AS a
			LEFT JOIN mall_goods AS b 
			ON a.cat_id = b.cat_id AND a.price < b.price
			GROUP BY a.goods_id,a.cat_id,a.price
			HAVING COUNT(b.goods_id) < 2
			ORDER BY a.cat_id,a.price DESC;
 3. exists    (           ,          )
		#          
		SELECT cat_id,cat_name FROM mall_category AS b WHERE EXISTS(SELECT a.goods_id,a.cat_id,a.price,a.state FROM mall_goods AS a WHERE a.cat_id = b.cat_id);

unionの使い方
UNION              SELECT       。
  【UNION     SELECT             。             。  ,   SELECT             】。
   ,UNION          。        ,    UNION ALL。

Left Connection
	1、   
		     ,      ,         ,  null   ,       >=      
	2、   
		a left join b     b right join a
	3、   
		            ,【          null     (      )】