MySQL概览及sql语句的综述

来源:互联网 发布:互穿网络聚合物 编辑:程序博客网 时间:2024/06/14 00:34

MySQL是一个开源的关系型数据库,在学习mysql之前,有一些简单的概念需要了解一下,例如数据库、表、列和数据类型、行、主键、复合键和sql,可以自行搜索,不在赘述。


SQL——Structured Query Language

检索数据

检索单列

select column_name from table_name;

检索多列

select column1_name,column2_name from table_name;

检索所有列

select * from table_name;--不建议使用,降低效率

检索不同的值

distinct

限制结果

MySQL:SELECT prod_name FROM Products LIMIT 5;--前5个记录,LIMIT 5 OFFSET 5; --5行后的5个数据 LIMIT 5,5;

排序检索数据

order by 关键字,使用他可以对数据进行升降序

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC, prod_name;

按DESC前的列降序,默认升序,还可以按列位置进行排序,并且此子句位于最后

过滤数据

具体就是查出相等、不相等、大于小于、值的范围、NULL

where price < 10; --查出所有价格小于10的

where price <> 20; --查出所有价格不是20的,可以使用!=,看数据库使用什么

SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10;--查出价格在5到10的

SELECT prod_name FROM Products WHERE prod_price IS NULL; --查出价格为空的


高级过滤

AND和OR

使用AND和OR进行更强的过滤控制,讲条件附加起来,AND即为满足所有条件,OR为满足其中一种

SELECT prod_name, prod_price
FROM Products
WHERE (vend_id = 'DLL01' OR vend_id = ‘BRS01’)
AND prod_price >= 10;

OR的优先度低于AND,为了正确的结果,我们需要用(),来控制求值顺序

IN和NOT

SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ( 'DLL01', 'BRS01' )
ORDER BY prod_name; 

查找in范围内供应商提供的所有产品,等同于 vend_id = 'DLL01' OR vend_id ='BRS01',但是速度更快

not 否定其后的条件

通配符

通配符只能用在文本,关键词为like

name like 'fish%'  --查出以fish为首的name, %表示任意字符任意次数
__下划线,匹配单个字符
方括号([])通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。-----不常用,MySQL


计算字段

字段拼接

SELECT Concat(vend_name, ' (', vend_country, ')')
AS vend_title
FROM Vendors
ORDER BY vend_name;

字段拼接,AS别名

算数计算

支持+-*/,算出来AS别名


函数

数据处理函数
汇总函数:sum、avg、count、max、min

分组数据

group by 和 having

子查询

SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT order_num
                                      FROM OrderItems
                                      WHERE prod_id = 'RGAN01');

JOIN

SELECT prod_name, vend_name, prod_price, quantity
FROM OrderItems, Products, Vendors
WHERE Products.vend_id = Vendors.vend_id
AND OrderItems.prod_id = Products.prod_id
AND order_num = 20007;

高级联结

自联结
自然联结
外联结

组合查询

union

事务处理MySQL

使用rollback

DELETE FROM Orders;
ROLLBACK;

使用commit

BEGIN TRANSACTION
DELETE OrderItems WHERE order_num = 12345
DELETE Orders WHERE order_num = 12345
COMMIT TRANSACTION

设置保留点
BEGIN TRANSACTION
INSERT INTO Customers(cust_id, cust_name)
VALUES('1000000010', 'Toys Emporium');
SAVE TRANSACTION StartOrder;
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20100,'2001/12/1','1000000010');
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20100, 1, 'BR01', 100, 5.49);
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20100, 2, 'BR03', 100, 10.99);
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
COMMIT TRANSACTION


索引

索引可以加快排序和搜索的速度,例如
CREATE INDEX prod_name_ind
ON PRODUCTS (prod_name);

但是索引会降低增删改的性能,因为索引会更新,所以在没有较多查询的列上不必用索引