SQL是结构化查询语句(Structured Query Language)的缩写,其功能包括数据查询(DQL)、数据定义(DDL)、数据操作(DML)和数据控制(DCL)4个部分。
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等; CREATE、 ALTER、DROP
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据); INSERT、 UPDATE、 DELETE
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
MySQL使用
SHOW DATABASES;#显示数据库 USE databases;#选择数据库 SHOW TABLES;#显示所选择数据库表 SHOW COLUMNS FROM table;#显示表设计信息
检索数据
SELECT pro_name FROM products;#查找单个列 SELECT pro_name,prod_id,rod_price FROM products;#查找多列 SELECT * FROM products;#查找所有列 SELECT DISTINCT vend_id FROM products;#检索数据不重复 SELECT prod_name FROM products LIMIT 5;#检索结果不多于5行(第一行开始) SELECT prod_name FROM products LIMIT 5,5;#检索从第五行开始的五行
排序检索数据
SELECT prod_name FROM products ORDER BY prod_name;#检索并排序 SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_naem;#按多个列排序 SELECT prod_name FROM products ORDER BY prod_name DESC;#指定排序方向,DESC降序 SELECT pro_price FROM products ORDER BY prod_price DESC LIMIT 1;#ORDER BY 与 LIMIT 组合使用
过滤数据
SELECT prod_name,prod_price FROM products WHERE prod_price=2.5;#操作符:=、<>(不等于)、!=、<、>、<=、>=、BETWTEEN a AND b、IS NULL
数据过滤
SELECT prod_id,prod_name,prod_price FROM products WHERE vend_id==1003 AND prod_price<=10;#组合WHERE; AND、OR SELECT prod_name,prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;#指定条件范围检索;NOT IN
通配符过滤
SELECT prod_name,prod_price FROM products WHERE prod_name LIKE 'jie%'; #'%':任何字符出现任意次数 #'_':匹配单个任意字符 REGEXP 正则表达式匹配
创建计算字段
SELECT Concat(vend_name,'(',vend_country,')') FROM vendors ORDER BY vend_name;#拼接字段 SELECT Concat(RTrim(vend_name),'(',RTrim(vend_country),')') AS vend_title FROM vendors ORDER BY vend_name;#拼接字段,使用别名 SELECT pro_id,quantity,item_price, quantity*item_price AS expended_price FROM orderitems WHERE order_num=2005;#执行算数计算
组合查询
可用UNION操作符来组合数条SQL查询。利用UNION可给出多条SELECT语句,将它们的结果组合成单个结果集。
SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price<=5 UNION SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN (1001,1002);
插入数据
插入一行数据:
INSERT INTO coustomers(cust_name, cust_address, cust_city, cust_state. cust_zip, cust_country, cust_contact) VALUES('Pep E.LaPew', '100 main street', 'Los Angeles', 'CA', '90046', 'USA', NULL);
插入多行数据:
INSERT INTO coustomers(cust_name, cust_address, cust_city, cust_state. cust_zip, cust_country, cust_contact) VALUES('Pep E.LaPew', '100 main street', 'Los Angeles', 'CA', '90046', 'USA', NULL),#逗号隔开 ('Pep E.LaPew', '100 main street', 'Los Angeles', 'CA', '90046', 'USA', NULL);
插入检索出的数据
INSERT INTO coustomers(cust_name, cust_address, cust_city, cust_state. cust_zip, cust_country, cust_contact) SELECT cust_name, cust_address, cust_city, cust_state. cust_zip, cust_country, cust_contact FROM custnew;
更新与删除
#更新 UPDATE customers SET cust_name='The Fudds', cust_email='12345@123.com' WHERE cust_id=1005; #删除 DELETE FROM customers WHERE cust_id=1006;#省略WHERE子句则删除整个表的内容,但不删除表 #DELETE不需要列名或通配符。DELETE删除整行而不是删除列。为了删除列,使用UPDATE语句 UPDATE customers SET cust_email=NULL WHERE cust_id=1005;#其中NULL用来删除cust_email列中所有值 #更快的删除,删除表中数据,不删除表 TRUNCATE TABLE#速度比delete更快
创建和操纵表
#创建表 CREAT TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) NOT NULL, cust_address char(50) NULL, cust_city char(50) NULL, cust_state char(5) NULL, PRIMARY KEY (cust_id) )ENGINE=InnoDB; #AUTO_INCREMENT 值自动增加
#DEFAULT 指定默认值 CREAT TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) NOT NULL, cust_address char(50) NULL DEFAULT china, cust_city char(50) NULL, cust_state char(5) NULL, PRIMARY KEY (cust_id) )ENGINE=InnoDB;
#更新表 ALTER TABLE vendors ADD vend_phone CHAR(20);#添加列 ALTER TABLE vendors DROP COLUMN vend_phone;#删除列
#删除表 DROP TABLE coustomers;
#重命名表 RENAME TABLE customers2 TO customers;
视图
CREATE VIEW productcustomers AS SELECT cust_name,cust_contact,prod_id FROM customers,orders,orderitems WHERE customers.cust_id=orders.cust_id;
内连接与外连接
1.内连接,显示两个表中有联系的所有数据;
2.左链接,以左表为参照,显示所有数据;
3.右链接,以右表为参照显示数据;
内连接
内连接又称等值连接,使用 INNER JOIN 关键字。
select a, b, c from A inner join B on A.key = B.keymysql
可以不明确使用 INNER JOIN,而使用普通查询并在 WHERE 中将两个表中要连接的列用等值方法连接起来。
select a, b, c from A, B where A.key = B.key
外连接
外连接保留了没有关联的那些行。分为左外连接,右外连接以及全外连接,左外连接就是保留左表没有关联的行。
检索所有顾客的订单信息,包括还没有订单信息的顾客。
select Customers.cust_id, Orders.order_num
from Customers left outer join Orders
on Customers.cust_id = Orders.curt_id;