MySQL必知必会

2020-11-16  本文已影响0人  upup果

数据库基础

检索数据

SELECT 语句

检索单个列

SELECT column_name FROM table_name;

检索多个列

多个列之间用逗号隔开,最后一个列不加:
SELECT col1,col2,col3 FROM table_name;

检索所有列

使用通配符 * :SELECT * FROM table_name;

检索不同值

使用DISTINCT关键字,放在列名的前面:
SELECT DISTINCT column_name FROM table_name;

限制检索

使用LIMIT和OFFSET关键字:
限制结果不超过5行:SELECT col_name FROM table_name LIMIT 5;
第五行起的5行:SELECT c_name FROM t_name LIMIT 5 OFFSET 5;

注释

--行注释
/* */多行注释

使用ORDER BY排序检索数据

在指定一条ORDER BY子句时,应该保证它是SELECT语句中最后一条子句。

排序单列数据

SELECT col_name FROM tab_name ORDER BY col_name;

多列排序

多列之间用逗号隔开:
SELECT col1,col2,col3 FROM table_name ORDER BY col1,col2;

降序排序

默认排序是升序方式,可以使用DESC关键字对列进行降序排序:
SELECT col1,col2 FROM table_name ORDER BY col1 DESC;

过滤数据

使用WHERE过滤数据

在SELECT语句中,根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出:
SELECT col1 FROM tab_name WHERE col=xxx;

WHERE字句操作符

where.png

高级过滤查询

组合WHERE字句

AND操作符:可以增加多个过滤条件,每个条件间都要使用AND关键字
OR操作符:用来表示检索匹配任一给定条件的行
具有AND和OR操作符的WHERE子句,应该用圆括号明确地分组操作符
IN操作符:指定条件范围,每个条件都可以进行匹配。IN取一组由逗号分隔、括在圆括号中的合法值。功能与OR相当

用通配符过滤

LIKE操作符

%通配符

%表示任何字符出现任意次数:WHERE prod_name LIKE 'Fish%'表示,将检索任意以Fish起头的词。%告诉DBMS接受Fish之后的任意字符,不管它有多少。
搜索模式'%bean bag%'表示匹配任何位置上包含文本bean bag的值,不论它之前或之后出现什么字符。

_通配符

下划线的用途与%一样,但它只匹配单个字符,而不是多个字符
配符搜索一般比前面讨论的其他搜索要耗费更长的处理时间。这里给出一些使用通配符时要记住的技巧。

创建计算字段

计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的
拼接字段:||
去掉空格: TRIM,LTRIM,RTRIM
起别名: AS

函数使用

常用函数

常用函数.png

汇总数据

聚集函数

聚集函数.png

分组数据

创建分组:分组是使用SELECT语句的GROUP BY子句建立的
过滤分组:HAVING,WHERE过滤行,而HAVING过滤分组。
WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤
SELECT子句顺序

select字句顺序.png

使用子查询

嵌套where:WHERE子句中使用子查询能够编写出功能很强且很灵活的SQL语句。对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询

联结表

创建联结

指定要联结的所有表以及关联它们的方式即可
SELECT vend_name, prod_name, prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;

内联结

SELECT vend_name, prod_name, prod_price
FROM Vendors INNER JOIN Products ON Vendors.vend_id = Products.vend_id;
以上两个表之间的关系是以INNER JOIN指定的部分FROM子句。在使用这种语法时,联结条件用特定的ON子句而不是WHERE子句给出。传递给ON的实际条件与传递给WHERE的相同。

SQL不限制一条SELECT语句中可以联结的表的数目。创建联结的基本规则也相同。首先列出所有表,然后定义表之间的关系。

高级联结

表起别名:FROM Customers AS C, Orders AS O, OrderItems AS OI
WHERE C.cust_id = O.cust_id

自然联结:自然联结要求你只能选择那些唯一的列,一般通过对一个表使用通配符(SELECT *),而对其他表的列使用明确的子集来完成。
外联结:使用OUTER JOIN语法时,使用LEFT OUTER JOIN从FROM子句左边的表中选择所有行。为了从右边的表中选择所有行,需要使用RIGHT OUTER JOIN。

组合查询

UNION:可用UNION操作符来组合数条SQL查询。利用UNION,可给出多条SELECT语句,将它们的结果组合成一个结果集,如下所示:
SELECT cust_name, cust_contact, cust_email
FROM Customers WHERE cust_state IN ('IL','IN','MI')
UNION
SELECT cust_name, cust_contact, cust_email
FROM Customers WHERE cust_name = 'Fun4All';

插入数据

INSERT INTO Customers(cust_id, cust_name,
cust_address, cust_city,
cust_state, cust_zip,
cust_country, cust_contact, cust_email)
VALUES('1000000006', 'Toy Land',
'123 Any Street', 'New York',
'NY', '11111', 'USA',
NULL, NULL);

更新和删除数据

更新
UPDATE Customers
SET cust_contact = 'Sam Roberts',
cust_email = 'sam@toyland.com'
WHERE cust_id = '1000000006';
删除
DELETE FROM Customers
WHERE cust_id = '1000000006';

创建和操纵表

创建表
CREATE TABLE OrderItems ( order_num INTEGER NOT NULL,
order_item INTEGER NOT NULL,
prod_id CHAR(10) NOT NULL,
quantity INTEGER NOT NULL DEFAULT 1, item_price DECIMAL(8,2) NOT NULL
);

更新表
ALTER TABLE Vendors
DROP/ADD COLUMN vend_phone;
删除表
DROP TABLE CustCopy;
重命名表:使用RENAME语句
未完待续...

上一篇 下一篇

猜你喜欢

热点阅读