MySQL数据库基础语言整理:
自己学习MySQL必知必会一书时笔记的整理。
基本概念
数据库:保存有组织的数据的容器。
表:结构化文件,存同一类数据。
模式:关于数据库的布局、特征等的信息。
列:每个列有自己特定数据类型。
行:每个记录存在自己的行。
主键:每一行有唯一标识自己的一列
简单语句
SELECT:
SELECT prod_id,prod_price#可以用通配符*提取所有行
FROM Products;
ORDER BY
SELECT prod_id,prod_price,prod_name
FROM Products
ORDER BY prod_price DSEC,prod_name;
/*DSEC表示按降序排列,默认升序。第一列相同,按第二列排列,这里prod_price也可以用所在位置2来写*/
#ORDER BY语句一般放在所有语句之后
WHERE
SELECT prod_id,prod_price,prod_name
FROM Products
WHERE prod_price BETWEEN 5 AND 10;
/*WHERE子句操作符:=、<>、!=、BETWEEN、IS NULL,字符串用‘’表示*/
可以用AND和OR组合搜索条件,优先级为AND>OR,要改变顺序,运用()
IN可以指定搜索范围,里面的每个条件都可匹配
NOT否定之后所跟的条件
SELECT prod_id,prod_price,prod_name
FROM Products
WHERE Vend_id IN ('DLLo1','BRS02');
#WHERE NOT Vend_id='DLLo1'
LIKE
通配符搜索仅适用于文本字符串。
%:表示任何字符出现任意次数
_:只表示单个字符
[]:用来指定一个字符集,必须匹配指定位置一个字符。
SELECT prod_id,prod_price,prod_name
FROM Products
WHERE prod_name LIKE '[^JM]%';#%表示是什么都无所谓
创建计算字段
拼接字段:MySQL使用CONCAT
去空格:RTRIM去右边空格,LTRIM去左边空格,TRIM去两边空格。
使用别名:AS
算数计算:*
SELECT CONCAT PTRIM(prod_price),'(',prod_name,')'
FROM Products
WHERE Vend_id IN ('DLLo1','BRS02');
SELECT prod_id,prod_price,quantity
quantity*prod_price AS ex_price
FROM Products
WHERE quantity=2003;
使用数据处理字段
(每个DBMS都有特定函数)
文本处理:UPPER,LOWER(改变大小写),LENGTH,LEFT(返回串左边字符)
*日期处理:*使用YEAR提取年份
数值处理:
SELECT order_num
FROM ORDERS
WHERE YEAR(order_date)=2004
汇总数据
聚集函数:AVG,COUNT(返回符合条件行的数目),MAX,MIN,SUM
SELECT COUNT(cust_email) AS num_cust
FROM Customers
/*若要统计不同行,加DISTINCT,SELECT COUNT(DISTNCT cust_email) AS num_cust*/
分组数据
创建分组GROUP BY
过滤分组:HAVING
SELECT vend_id,COUNT(*) AS num_prods
FROM Products
WHERE prod_price>=4
GROUP BY vend_id
HAVING COUNT(*)>=2
#列出两个以上,价格为4以上的产品供应商
使用子查询
SELECT由里到外计算。
SELECT cust_name,cust_contact
FROM Customers
WHERE cust_id IN(SELECT cust_id
FROM Orders
WHERE order_num IN(SELECT order_num
FROM OrderItems
WHERE prod_id='RGAN01'));
联结表
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=2007;
不同联结类型:
自联结:子查询/联结
自然联结:排除相同的出现多次的列,每个列返回一次
外部联结:包含没有关联行那些行(OUTER JION)
组合查询
UNION:连接两个完整的SELECT语句。默认消除相同的行,若不想消除,使用UNION ALL
插入数据
插入完整行:
INSERT INTO Customers(cust_id,
cust_name,
cust_address)
VALUES('1006',
'Tpu',
NULL);
插入检索出的数据:
INSERT INTO Customers(cust_id,
cust_name,
cust_address)
SELECT cust_id,
cust_name,
cust_address
FROM CustNew;
从一个表复制到另一个表:
CREAT TABLE custcopy AS
SELECT *
FROM Custmors;
更新删除数据
UPDATE
DELETE
UPDATE Custmors
SET cust_contact='S'
WHERE cust_id='1006';
DELETE FROM Customers
WHERE cust_id='10006’;
创建和操纵表
创建:CREAT TABLE
CREAT TABLE OrderItems
(
order_num INTEGER NOT NULL,
prod_id CHAR(10) NOT NULL
);
更新:ALTER TABLE
ALTER TABLE Vendors
ADD vend_phone CHAR(20)#删除用DROP
删除:DROP TABLE
DROP TABLE custcopy;
重命名表 RENAME