多表的查詢
1、連接查詢
a、交叉連接:(cross in)
create table CUSTOMERS(
id int(11) NOT null auto_increment,
name varchar(100) default null,
city varchar(20) default null,
primary key (id)
);
在插入數據的時候如果出現了中文插不進去的時候,保錯的提示信息
是varchar的長度不夠的時候,但是我們又明顯知道我們指定的
長度是夠的時候
我們可以看看我們的編碼格式
show variables like"character%";
然後設置我們的編碼格式
通常設置
set character_set_client=gbk;
set character_set_results=gbk;
原因是我們的dos命名行下的編碼格式是gbk;
insert into CUSTOMERS values(1,"張三","四川");
insert into CUSTOMERS values(2,"李四","重慶");
insert into CUSTOMERS values(3,"王五","廣州");
insert into CUSTOMERS values(4,"孫六","湖北");
insert into CUSTOMERS values(5,"周七","上海");
然後創建orders表格
create table orders(
ID int(11) NOT NULL auto_increment,
order_number varchar(100) default NULL,
price float(8,2) default null,
customer_id int(11) default null,
primary key (ID),
key customer_id_fk (customer_id),
constraint customer_id_fk foreign key (customer_id) references CUSTOMERS(ID)
);
INSERT INTO `orders` VALUES (1,'0001',100.00,1),(2,'0002',200.00,1),(3,'0003',300.00,1),(4,'0004',100.00,2),(5,'0005',200.00,3),(6,'0006',100.00,4),(7,'0007',1000.00,NULL);
select * from customers,orders;
select c.ID,c.NAME,o.ORDER_NUMBER,o.PRICE from CUSTOMERS c,ORDERS o;
查詢結果如下:
共有35條記錄。
b、內連接(inner join)
隱式內連接:
select * from CUSTOMERS c,ORDERS o where c.ID= o.CUSTOMER_ID;
顯示內連接:(關鍵字inner join)
select * from CUSTOMERS c inner join ORDERS o on c.ID=o.CUSTOMER_id;
其中的關鍵字inner 可以省略,省略後如下:
select * from CUSTOMERS c join ORDERS o on c.ID=o.CUSTOMER_id;
查詢結果如下:
c、外連接(outer join)
查看所有客戶信息,同時有訂單的顯示訂單的詳細信息
左外連接:返回滿足連接條件的記錄,同時返回左表中剩餘的其他記錄。
select * from CUSTOMERS c left outer join ORDERS o on c.ID=o.CUSTOMER_ID;
查詢結果如下:
查看所有訂單信息,同時返回下單的客戶信息
右外:返回滿足連接條件的記錄,同時返回右表中剩餘的其他記錄。
select * from CUSTOMERS c right outer join ORDERS o on c.ID = o.CUSTOMER_ID;
2、子查詢
又稱之爲嵌套查詢。查詢中有查詢。
執行順序:先執行子查詢(內查詢),再執行外查詢。
子查詢:必須放在小括號之內。
查詢“張三”的所有訂單信息
形式一:多條查詢語句
select ID from CUSTOMERS where NAME='張三';
select * from ORDERS where CUSTOMER_ID=1;
形式:subselect(子查詢)
select * from ORDERS where CUSTOMER_ID=(select ID from CUSTOMERS where NAME='張三');
查詢訂單單價大於100的有哪些客戶?
select * from CUSTOMERS where ID in (select CUSTOMER_ID from ORDERS where PRICE > 100);
3、MySql常用的函數
SUM():求和
COUNT():計數
AVG():求平均
MAX():求最大
MIN():求最小
統計有多少個客戶
select count(*) from CUSTOMERS;
統計訂單值大於300的訂單
select count(*) from ORDERS where PRICE>=300;
4、分組(報表)查詢:group by
對訂單表中商品歸類後,顯示沒一類商品的總價
對訂單表中商品歸類後,顯示每一類商品的總價
select PRODUCT,sum(PRICE) from PRODUCTS group by PRODUCT;
查詢購買了幾類商品,並且每類總價大於100的商品
select PRODUCT,sum(PRICE) from PRODUCTS group by PRODUCT having sum(PRICE)>100;
5、數據庫的備份和恢復
(1)、備份數據(表結構和數據)
c:\MySQL\bin\mysqldump -h localhost -p3306 -u root -p test5>d:/test5.sql
所以我在cmd下面執行:mysqldump -h localhost -p3306 -u root -p test5>d:/test5.sql就可以完成備份
(2)、恢復數據庫中的數據
方式一:
由於剛纔我已經刪除了數據庫
應該先創建數據庫
create database test5;
然後:use test5;
最後:source d:test5.sql;
這樣就可以完成數據庫的恢復
方式二:
c:MySQL\bin\mysql -u root -p test6<d:/test5.sql
執行:mysql -u root -p test5<d:/test5.sql(注意沒有“;”)
當然再執行之前也應該保證test5的數據庫數存在的。
(3)、刪除數據庫
drop database test5;
(4)、查詢tables
show tables;