MySQL基本查詢語句


1 數據庫入門

1.1 引入

方式一: 數據放到內存

優點:

1)擦寫數據的效率很高!

缺點:

1)無法永久保存,當程序關閉了,數據丟失

 

方式二: 數據放到普通文件

優點:

1)可以永久保存

缺點:

1)頻繁地進行IO操作,效率比較低

2)查詢數據不方便的!!!

 

方式三: 數據放到數據庫軟件

優點:

    1)數據永久保存下來

2)查詢數據非常方便的!!

3)效率不能低

 

1.2 市面上常見的數據庫軟件

數據庫軟件,存儲和管理數據的倉庫。

 

Oracle: 是甲骨文公司的產品。滿足中大型應用。和java語言兼容性非常好的。

SQL Server: 是微軟公司的產品。和net平台(c#語言)兼容最好。

DB2: IBM的產品。

mysql:開源的數據庫產品。和java語言兼容非常好。滿足中小型應用。

mangoDBnoSQL數據庫

 

mysql: 滿足中小型應用

oracle:滿足中大小應用

1.3 mysql數據庫基本使用

C:\Users\APPle>mysql -u root -p

Enter password: ****

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 12

Server version: 5.5.40 MySQL Community Server (GPL)

 

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

mysql>

 

數據定義語言(DDL),例如:CREATEDROPALTER等語句。

數據操作語言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句。

數據查詢語言(DQL),例如:SELECT語句。(一般不會單獨歸於一類,因為只有一個語句)。

數據控制語言(DCL),例如:GRANTREVOKE等語句。

事務控制語言(TCL),例如:COMMITROLLBACK等語句。

SQL語言包括四類種主要程序設計語言類別的語句:數據定義語言(DDL),數據操作語言(DML)及數據控制語言(DCL)還有事務控制語言(TCL)。

2 管理數據庫

2.1 查看所有數據庫

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |         數據庫的元數據

| mysql              |        數據庫用戶信息或軟件配置信息

| performance_schema |        數據庫軟件運行的性能數據

| test               |        測試數據庫

+--------------------+

4 rows in set (0.00 sec)

 

2.2 創建新的數據庫

create database user;

 

指定字符集  create database user default character set gbk;

2.3 修改數據庫

修復數據庫的字符集    alter database user default character set utf8;

2.4刪除數據庫

drop database admin_user;

 

 

3 管理表

操作表之前,需要切換數據庫:  use 數據庫名稱     例如  use  admin_user;

3.1 創建新的表(create table)

create table student(id int,name varchar(20),age int);

 

create table 表名(字段名稱 字段類型,字段名稱 字段類型.....);

 

3.2 修改表(alter table

添加字段:alter table student add column gender varchar(1);

修改字段類型:alter table student modify column gender varchar(2);

修改字段名稱:alter table student change column gender sex varchar(2);

刪除字段:alter table student drop column age;

修改表名稱:alter table student rename to teacher;

3.3 查看表

desc student;

show tables: 查看當前數據庫的所有表

3.4 刪除表

drop table teacher;

4 管理數據

1.1插入數據(insert into

需求: 往學生表插入數據

INSERT INTO student VALUES(1,'張三',20);

1)插入的字段值順序一定是按照表的字段順序

INSERT INTO student VALUES('張三',1,20);報錯

2)字段的數據一定要和值的數量要一致

INSERT INTO student VALUES(2,20); 報錯

3)插入部分字段

INSERT INTO student(id,NAME) VALUES(2,'李四');

1.2 修改數據(update)

需求: 修改學生表

1)批量操作(不建議經常使用這種)

UPDATE student SET NAME='張三';

2)按條件修改,修改一個字段

需求: 修改id2的學生姓名

UPDATE student SET NAME='李四' WHERE id=2;

需求: 修改id1的學生姓名和年齡

3)修改多個字段

UPDATE student SET NAME='王五',age=40 WHERE id=1;

1.3 刪除數據(delete from

 1) 全表數據刪除

DELETE FROM student;

2)按條件刪除數據

DELETE FROM student WHERE id=2;

3)truncate table也可以刪除全表數據

TRUNCATE TABLE student;

注意:delete from truncate table 的區別?

1delete from刪除全部,也可以按條件刪除,但是truncate table只能全表刪除,不能按條件刪除

2delete from刪除的數據可以回滾,truncate table刪除的數據不能回滾。

3delete from不可以把自增長約束(auto_increment)重置,truncate table可以把自增長約束(auto_increment)重置

truncate table student where id=1; 錯誤的語法

1.4 查看所有數據(重點中的重點)

SELECT * FROM student;

5 查詢數據(重點)

5.1 查詢所有字段  SELECT * FROM student;

5.2 查詢指定的字段  SELECT id,NAME FROM student;

5.3 查詢時指定別名(AS可以省略) SELECT id AS '編號',NAME AS '姓名' FROM student;

5.4 查詢時添加常量列

臨時使用的列可以通過查詢時動態添加進去

需求: 查詢學生數據時添加一個"班級"列。值為“java就業班”

SELECT id AS '編號',NAME AS '姓名','java就業班' AS '班級' FROM student;

5.5 查詢時合並列

需求: 查詢每個學生的總分。

SELECT NAME AS '姓名',(servlet+mysql) AS '總成績' FROM student;

注意: 合並列的字段必須是數值類型的字段。非數值類型合並沒有效果

SELECT NAME AS '姓名',(servlet+NAME) FROM student;

5.6 查詢去除重復記錄

需求: 查詢有哪些的地區學生

SELECT DISTINCT address FROM student;

另一種語法

SELECT DISTINCT(address) FROM student;

5.7 條件查詢

1)邏輯條件: and()     or(或)

   當出現兩個或兩個以上的條件,那么這兩個條件直接一定會存在邏輯關系。要么是與關系,要么或關系

 

需求:查詢學生的id1,且姓名為張三的學生 

SELECT * FROM student WHERE id=1 AND NAME='張三'; -- (交集,結果數小於或等於任何一個條件的結果數)

 

需求:查詢學生的id2,或姓名為張三的學生

SELECT * FROM student WHERE id=2 OR NAME='張三';  -- (並集,結果數一定會大於或等於任何一個條件的結果數)

 

 

2)比較條件: >  <  >=   <=  =  <>  (between and)

需求: 查詢servlet分數大於80分的學生

SELECT * FROM student WHERE servlet>80;

需求:查詢mysql分數小於或等於85分的學生

SELECT * FROM student WHERE mysql<=85;

SELECT * FROM student WHERE mysql<85 OR mysql=85;

需求: 查詢servlet分數大於或等於80分,且小於或等於85分的學生

SELECT * FROM student WHERE servlet>=80 AND servlet<=85;

上面sql代替的語法

SELECT * FROM student WHERE servlet BETWEEN 80 AND 85; -- ..。之間(包前包后)

需求:查詢年齡不等於30歲的學生

SELECT * FROM student WHERE age<>30;

 

3)判空條件: is null , is not null, ='' <>''

null: 表示沒有數據   is null   =''

空字符:有數據      is not null     <>''

需求:查詢沒有性別數據的學生(數據‘男’或‘女’)

SELECT * FROM student WHERE gender IS NULL OR gender='';

 

需求: 查詢有性別數據的學生

SELECT * FROM student WHERE gender IS NOT NULL AND gender<>'';

 

 

4)模糊條件: like

模糊替代符號:

%: 替代任意個字符

 _: 替代一個字符

需求: 查詢姓‘李’的學生

SELECT * FROM student WHERE NAME LIKE '%';

需求: 查詢姓名中包含‘四’字的學生

SELECT * FROM student WHERE NAME LIKE '%%';

需求:查詢姓‘李’,全名只有兩個字的學生

SELECT * FROM student WHERE NAME LIKE '_';

5.8 聚合查詢

用於統計結果

max()  min()  avg()  count()

需求: 查詢servlet的最高分

max() 取最大值

SELECT MAX(servlet) FROM student;

需求: 查詢mysql的最低分

min(): 取最小值

SELECT MIN(mysql) FROM student;

需求: 查詢servlt的平均分

avg(): 平均函數

SELECT AVG(servlet) FROM student;

需求:查詢當前有幾個學生

count(): 統計表的記錄數量

SELECT COUNT(*) FROM student;

 count(id): 統計有值的id字段的數量(排除null的數據)

SELECT COUNT(id) FROM student;

使用count統計表的數據,不要使用存在null的字段

SELECT COUNT(gender) FROM student;

5.9 分頁查詢

limit 起始行數,查詢的行數

起始行數從0開始

SELECT * FROM student;

需求:學生共20條數據,每頁顯示5條,共4

看第3(1115)的學生數據sqlselect * from student limit 10,5;

看第4(1620)的學生數據sql: select * from student limit 15,5;

 

  知道: 當前頁碼,每頁顯示條數

 

結論分頁查詢當前頁數據的sqlselect * from student limit (當前頁碼-1)*每頁顯示條數,每頁顯示條數;

 

需求: 查詢第1,2條數據

SELECT * FROM student LIMIT 0,2;

需求: 查詢第3,4條數據

SELECT * FROM student LIMIT 2,2;

需求:查詢第5,6條數據

SELECT * FROM student LIMIT 4,2;

 

5.10 查詢后排序(order by注意:orderby一般都放在sql語句的最后

desc: 降序。數值從大到小,字母z-a

asc: 升序。數值從小到大,字母a-z

默認情況下,按照插入的順序排序

SELECT * FROM student;

需求:按照id的升序排序

SELECT * FROM student ORDER BY id ASC;

需求: 按照servlet成績降序排序

SELECT * FROM student ORDER BY servlet DESC;

 

多個排序條件的情況:先按照前面的條件排序,當出現重復記錄,再按照后面的條件排序

需求: 按照age升序,按照servlet成績升序排序

SELECT * FROM student ORDER BY age ASC,servlet ASC;

 

select * from student order by username asc;

 

5.11 分組查詢(group by)

需求: 查詢每個地區有多少人

預期結果:

        3

        1

SELECT address,COUNT(*) FROM student;

 

1)對地區進行分組   2)在分組的基礎可以進行統計,統計的是每組的數據

SELECT address,COUNT(*) FROM student GROUP BY address;

需求: 統計男女的人數

注意:order by 必須放在分組之后; where條件必須放在group by分組之前

SELECT gender,COUNT(*) FROM student  WHERE gender IS NOT NULL AND gender<>'' GROUP BY gender;

 

5.12 分組查詢后篩選(having)

需求: 查詢哪些地區的人數大於2個的地區

1)查詢哪些地區多少人  2)篩選人數大於2的地區

注意: having使用在group by分組之后的,對分組后的條件進行篩選

SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>2 ;

 

6、字段類型

char(20) vs varchar(20)

char(20): 固定長度的字符串。不管實際存儲的數據的大小,一定占用20個字符空間

varchar(20): 可變長度的字符串。占用的空間大小就是實際存儲的數據大小。

 

int vs int(4)

int: 默認最多11位,長度根據實際存儲的數值的長度

int(4): 固定的數組長度

CREATE TABLE test(

id1 INT,

id2 INT(4) ZEROFILL -- zerofill: 零填充

)

INSERT INTO test VALUES(1,1);

SELECT * FROM test;

 

date vs datetime vs timestamp

date: 日期

datetime: 日期+時間

timestamp: 時間戳,用於記錄當前數據的插入或更新的時間

CREATE TABLE test_date(

date1 DATE,

date2 DATETIME,

date3 TIMESTAMP

)

 

INSERT INTO test_date(date1,date2) VALUES('2018-06-17 17:35:45','2018-06-17 17:35:45');

 

SELECT * FROM test_date;

 

UPDATE test_date SET date2='2018-06-17 17:40:45';

 

分類

數據類型

說明

數值類型

BIT(M)  bit  bit(8)

TINYINT [UNSIGNED] [ZEROFILL]  byte

BOOL,BOOLEAN   boolean

SMALLINT [UNSIGNED] [ZEROFILL] short

INT [UNSIGNED] [ZEROFILL] int

BIGINT [UNSIGNED] [ZEROFILL] long

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]  float

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] double

位類型。M指定位數,默認值1,范圍1-64

帶符號的范圍是-128到127。無符號0到255。

使用0或1表示真或假

2的16次方

2的32次方

2的64次方

M指定顯示長度,d指定小數位數

表示比float精度更大的小數

文本、二進制類型

CHAR(size) char(20)  max—255   abc            

VARCHAR(size)  varchar(20) 65535   abcde String

BLOB   LONGBLOB  大的二進制數據

TEXT(clob)          LONGTEXT(longclob)  大文本數據

固定長度字符串

可變長度字符串

二進制數據

大文本

時間日期

DATE/DATETIME/TimeStamp

日期類型(YYYY-MM-DD)  (YYYY-MM-DD HH:MM:SS),TimeStamp表示時間戳,它可用於自動記錄insert、update操作的時間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM