常用的sql語句(持續更新)
建立資料庫
1、連線資料庫
- #mysql -uroot -p(root使用者預設密碼空)
2、建立資料庫myTest
- #create database myTest;
3、顯示擁有許可權的資料庫
- #show databases;
4、切換資料庫
- #use databaseName
增
表(增刪改查)
1、增
create table students( id int auto_increment primary key, name varchar(10) not null, sex varchar(3) default '女', address varchar(50), phone int not null unique, age, );
2、刪
- #drop table tablename;
- #truncate tablename;#快速刪除表
3、改
- #alter table oldtable rename newtable; #改表名
- #alter table tablename modify name varchar(20);#改表結構
- #alter table tablename change name newname varchar(20);#改表結構
- #alter table tablename add age float after name;#新增欄位的位置
- #alter table tablename add primary key(id)
- #alter table tablename drop primary key(id)
查
- #show create table tablename ;#檢視新建表語句
- #desc table;#查看錶結構
- #show tables ;#檢視所有表
增
資料(增刪改查)
1、增
- #insert into student (name,money,sex,phone) values (‘hk’,10000,‘男’,188);
2、刪
- #turncate tablename; #刪除整表資料,自增長id從頭再來,快速,從磁碟直接刪除,不可恢復
- #delete from student;
#刪除整個表的資料,自增長繼續
3、改
- #update student set money=100;#不指定條件,修改所有
- #update student set money=110 where name=‘hk’;#只改hk
4、查
select * from students limit 1,5; #從第幾條開始,下面的x條,不包含開始的那一條
SELECT * from students limit 5;查詢5條
SELECT id,stu_name,sex,money,phone from students;#指定查詢的欄位
SELECT * from students;#查詢所有的資料
SELECT * from students where sex='男';#指定條件
SELECT * from students where sex='男' and money>100; #多個條件,必須同時滿足
SELECT * from students where sex='男' or sex='未知' ; #多個條件,有一個滿足即可
SELECT * from students where sex !='男'; #<>也是不等於
SELECT * FROM students where addr like '%東京%';#模糊匹配,%代表的是萬用字元,必須得用like
SELECT * from students a where a.stu_name like '姚_';#_萬用字元表示任意一個單字元,姚字後面只能跟一個字
SELECT a.stu_name '學生名稱',a.phone '學生電話' from students as a where a.stu_name='姚遠';#給表起別名,as可以省略
SELECT * from students a where a.stu_name in ('牛牛','林倩','林遠');# in
SELECT * from students a where a.money BETWEEN 1000 and 10000;#在什麼什麼之間的資料
SELECT * from students ORDER BY money desc;
#order by xxx desc,根據哪個欄位繼續排序,預設是升序,
降序是desc,升序asc
SELECT * from students a where a.addr = '' or a.addr is null; #查詢欄位為空的資料
SELECT DISTINCT a.money from students a ;#去重
SELECT COUNT(*) '學生人數' from students where sex='女'; #統計行數
SELECT MAX(a.money) 錢最多 from students a; #最大值
SELECT min(money) 錢最少 from students;#最小值
SELECT AVG(a.money) 平均多少錢 from students a; #平均數
SELECT sum(a.money) 總共多少錢 from students a;#總和
SELECT sex 性別,count(*) 人數 from students GROUP BY sex; #分組
資料庫許可權
1、grant授權
- #grant all on *. to ‘andashu’@‘localhost’ IDENTIFIED BY ‘123456’ with grant option;
- #grant all on *. to ‘andashu’@’%’ IDENTIFIED BY ‘123456’ with grant option
- #flush privileges;#重新整理許可權
2、取消授權
- #Revoke select on . from [email protected];
- #Revoke all on . from [email protected];
修改user表資料
備份資料庫:
- #mysqldump -uroot -p123456 db > db.sql
- #mysqldump -uroot -p123456 -A > all.sql
恢復資料:
- #mysql -uroot -p123456 db < db.sql
刪除資料庫使用者
1、drop不僅刪除user表的內容,還會刪除其他許可權表的內容
- #drop user username;
- #drop user [email protected];
2、delete只會刪除user表的內容,刪除使用者後需要用flush privileges重新整理許可權,不然下次create會報錯
- #delete from user where user=‘XXX’ and host=‘localhost’;其中XXX為使用者名稱,localhost為主機名
複製一張表到新表
方法一:
1.複製表結構及資料到新表
複製程式碼程式碼如下:
- #CREATE TABLE 新表
SELECT * FROM 舊錶
2.只複製表結構到新表
複製程式碼程式碼如下:
- #CREATE TABLE 新表
SELECT * FROM 舊錶 WHERE 1=2
即:讓WHERE條件不成立.
方法二:(低版本的mysql不支援,mysql4.0.25 不支援,mysql5已經支援了)
複製程式碼程式碼如下:
CREATE TABLE 新表
LIKE 舊錶
3.複製舊錶的資料到新表(假設兩個表結構一樣)
複製程式碼程式碼如下:
- #INSERT INTO 新表
SELECT * FROM 舊錶
4.複製舊錶的資料到新表(假設兩個表結構不一樣)
複製程式碼程式碼如下:
- #INSERT INTO 新表(欄位1,欄位2,…….)
SELECT 欄位1,欄位2,…… FROM 舊錶
多表連線查詢
表一:t_book
表二:t_bookType
表三:t_priceLevel
select * from t_book,t_bookType;
1.內連線查詢(兩張或以上的表連線起來查詢需要的資料)
根據表一的bookTypeId查詢出所有bookTypeName
select * from t_book,t_bookType where t_book.bookTypeId=t_bookType.id;
查詢某幾個欄位:
select bookNme,author from t_book,t_bookType where t_book.bookTypeId=t_bookType.id;
2.外連線查詢(兩張或以上的表連線起來查詢某張表的資訊)
3.左連線查詢
select * from t_book left join t_bookType on t_book.bookTypeId=t_bookType.id;
如下圖:表一(左邊表)t_book的資料全部查出 表二沒有的欄位用null代替
4.右連線查詢
select * from t_book right join t_bookType on t_book.bookTypeId=t_bookType.id;
查出表二(右邊表)的所有資訊,表一沒有的用null代替
5.多條件連線查詢
select * from t_book,t_bookType where t_book.bookTypeId=t_bookType.id and t_book.price>70;
子查詢
1.帶in關鍵字的子查詢(一個查詢語句的條件可能落在另一個select語句的查詢結果中)
select * from t_book where bookType in(select id from t_bookType);
select * from t_book where bookType not in(select id from t_bookType);
2.帶比較運算子的子查詢(子查詢可以使用比較運算子)
select * from t_book where price>=(select price from t_priceLevel where priceLevel=1);
3.帶exists關鍵字的子查詢(加入子查詢查詢到記錄,則進行外層查詢,否則,不執行外層查詢)
select * from t_book where exists(select * from t_booktype);
select * from t_book where not exists(select * from t_booktype);
4.帶any關鍵字的子查詢(any關鍵字表示滿足其中任一條件)
select * from t_book where price>= any(select price from t_priceLevel);
5.帶all關鍵字的子查詢(all關鍵字表示滿足所有條件)
select * from t_book where price>= all(select price from t_priceLevel);
合併查詢
1.union
使用union關鍵字是,資料庫系統會將所有的查詢結果合併到一起,然後去掉相同的記錄;
select id from t_book union select id from t_bookType;
2.union all
使用union all,不會去除掉重複的記錄;
select id from t_book union all select id from t_bookType;