1. 程式人生 > >常用的sql語句(持續更新)

常用的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、取消授權

修改user表資料

備份資料庫:

  • #mysqldump -uroot -p123456 db > db.sql
  • #mysqldump -uroot -p123456 -A > all.sql

    恢復資料:

  • #mysql -uroot -p123456 db < db.sql

刪除資料庫使用者

1、drop不僅刪除user表的內容,還會刪除其他許可權表的內容

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;