MySQL呼吁,一篇文章替你所有搞定
GROUP BY的行使留意事项: (1)GROUP BY子句中可以嵌套分组(即通过多个罗列办分组GROUP BY cust_id, cust_name),可是举办数据汇总时,是在最后划定的分组长举办;(2)GROUP BY子句中列出的每个列都必需是检索列可能是有用的表达式。(3)假若有NULL值,将值NULL作为一个分组举办返回,假若有多行NULL值,它们将分为一组 嵌套其他查询中的查询,称之为子查询。执行进程由里向外,里层查询功效作为外层查询的前提:SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id = 'happy')。虽然,多表的查询可所以用联络查询。 联络查询 内联络用又称之为内部联络,是基于两个表 之间的的相称测试。假如不加过滤前提,会造成“笛卡尔积”。SELECT vend_name,prod_name,prod_price FROM vendors INNER JOIN products ON vendors.vend_id=products.vend_id;同样可以行使WHERE举办多表联络查询,可是更保举行使INNER JOIN等联络方法; 外部联络包罗左外联络LEFT JOIN和右外联络RIGHT JOIN和全毗连FULL JOIN。譬喻查询每个客户的订单数:SELECT customers.cust_id,orders.orders_num FROM customers LEFT JOIN orders ON orders.cust_id =customers.cust_id;LEFT JOIN 会所有返回左表数据,RIGHT JOIN会所有返回右表数据,FULL JOIN会将阁下两个表的数据所有返回; 联络查询与聚积函数一路行使。如查询每个客户的订单数:SELECT customers.cust_name,customers.cust_id,COUNT(orders.order_num) AS num_ord FROM customers INNER JOIN orders ON customers.cust_id=orders.cust_id GROUP BY customers.cust_id; 组合查询 多个查询(SELECT)可以行使UNION将多个查询功效举办归并成一个功效集返回,UNION必需包括两个及两个以上的SELECT查询,而且每个传必需包括沟通的列、表达式或聚积函数,数据范例不必完全沟通,MySQL会举办隐式的范例转换。SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price>5 UINON SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN (1001,1002); UNION返回的是去重后的功效,,假如不必要去重则可以行使UNION ALL; 可以多组合查询行使ORDER BY举办排序,可是是针对的最终的功效集举办排序,而不是个中单个SELECT查询举办排序,因此对付组合查询来说ORDER BY子句只有一个。SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price>5 UINON SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN (1001,1002) ORDER BY vend_id 行使函数对数据举办处理赏罚 拼接列名:SELECT Concat (vendName,'(',vendCountry,')') FROM vendors ORDER BY vendName; 执行算术表达式计较:SELECT prodId, quantity,price, quantity*price AS expandedPrice FROM orderItems; 文本处理赏罚函数如Upper(),LTrim(),RTrim()等函数。好比行使Upper函数将文本转换成大写:SELECT vendName, Upper(vendName) FROM vendors ORDER BY vendName; 时刻和日期处理赏罚函数,如Date(),Day()等。SELECT custId, orderNum FROM orders WHERE Date(orderDate)='2015-09-01'; 数值处理赏罚函数,如Abs(),Cos()等; 常用的聚积函数。如AVG(),COUNT(),MAX(),MIN()以及SUM()。SELECT COUNT(*) AS numbers, MIN(prod_price) AS price_min, MAX(prod_price) AS price_max,AVG(prod_price) AS price_avg FROM products; 2.2 插入表数据 向表中插入行数据可以行使INSERT INTO子句,更安详的方法是指定列名。INSERT INTO customers (cust_name, cust_email) VALUES('happy','happy@gmail.com');在INSERT INTO子句中可以或许省略列名的条件前提是:该列可以应承界说为NULL值可能在界说该列时给出去了默认值; 假如插入多行数据可以将多组值用逗号举办脱离即可。INSERT INTO customers (cust_name, cust_email) VALUES('happy','happy@gmail.com'),('smart','smart@gmail.com'); 将查询出来的数据插入表中,可以行使INSERT SELECT语句。INSERT INTO customers(cust_id,cust_contact) SELECT cust_id, cust_contact FROM customers WHERE cust_id>5;个中SELECT中可以带WHERE过滤前提;INSERT SELECT凡是被用于复制表数据 2.3 更新表数据 假如要更新表数据的话,行使UPDATE子句:UPDATE customers SET cust_name ='happy',cust_email='happy@gmail.com' WHERE cust_id = 1001; 留意:假如不加WHERE前提指定到某一行的话,会更新表中某一列所有的数据。 2.4 删除表数据 假如从表中删除数据的话,可以行使DELETE子句。DELETE FROM customers WHERE cust_id = 10086;删除的数据一定是表中行数据,而不是某一列。因此,与UPDATE子句对比,DELETE子句并不必要指定是哪一列,而仅仅只必要指定详细的表名即可; 留意:假如不添加WHERE指定前提的话,会将整个表中全部行数据所有删除。其它,DELETE只是删除表中的数据,而不会删除表布局信息; 假如想删除表中所有的数据,可以行使TRUNCATE,比DELETE删除服从更高; 3. SQL中要害字执行次序在SQL语句中每个要害字城市凭证次序往下执行,而每一步操纵,会天生一个假造表,最后发生的假造表会作为执行的最终功效返回。下面的是常用的要害字的执行次序: FROM:对FROM左边的表和右边的表计较笛卡尔积,发生虚表VT1; ON:对假造表VT1举办ON筛选,只有那些切合前提的行才会被记录在假造表VT2中; JOIN:假如是OUT JOIN,那么将保存表中(如左表可能右表)未匹配的行作为外部行添加到假造表VT2中,从而发生假造表VT3; WHERE:对假造表VT3举办WHERE前提过滤,只有切合的记录才会被放入到假造表VT4; GROUP BY:按照GROUP BY子句中的列,对假造表VT4举办分组操纵,发生假造表VT5; CUBE|ROLLUP:对假造表VT5举办CUBE可能ROLLUP操纵,发生假造表VT6; HAVING:对假造表VT6举办HAVING前提过滤,只有切合的记录才会被插入到假造表VT7中; SELECT:执行SELECT操纵,选择指定的列,插入到假造表VT8中; DISTINCT:对假造表VT8中的记录举办去重,发生假造表VT9; ORDER BY:将假造表VT9中的记录凭证举办排序操纵,发生假造表VT10; LIMIT:取出指定行的记录,发生假造表VT11,并将功效返回。 4. 索引MySQL索引的成立对付MySQL的高效运行是很重要的,索引可以大大进步MySQL的检索速率。索引分单列索引和组合索引。单列索引,即一个索引只包括单个列,而组合索引,即一个索引包括多个列。 4.1 建设索引 建设索引有两种方法,一种是直接操作CREATE INDEX举办建设,其它一种则是通过修改表布局来举办添加,则是操作ALTER TABLE语句。 行使CREATE INDEX (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |