您好,登錄后才能下訂單哦!
一、對數(shù)據(jù)庫進行操作(DDL語句)。
1.創(chuàng)建數(shù)據(jù)庫。
create database [if not exists] 數(shù)據(jù)庫名稱 character set 字符編碼;
例:創(chuàng)建一個數(shù)據(jù)庫,名字為db_1,字符編碼為utf8
create database if not exists db_1 character set utf8;
2.查看數(shù)據(jù)庫。
2.1查看所有數(shù)據(jù)庫:show databases;
2.2 查看一個數(shù)據(jù)庫的創(chuàng)建方式:show create database 數(shù)據(jù)庫名稱;
例:
show create database db_1;
3.修改數(shù)據(jù)庫。
alter database db_name [character set xxx]
4.切換當前操作的數(shù)據(jù)庫。
use 所要切換到的數(shù)據(jù)庫名稱。
例:use db_1
若要查看當前在哪個數(shù)據(jù)庫下:
select database();
二、mysql中的數(shù)據(jù)類型。
MySQL支持多種類型,大致可以分為三類:數(shù)值、日期/時間和字符串(字符)類型。
數(shù)值類型:
日期和時間類型:
字符串類型:
CHAR和VARCHAR類型類似,但它們保存和檢索的方式不同。它們的最大長度和是否尾部空格被保留等方面也不同。在存儲或檢索過程中不進行大小寫轉(zhuǎn)換。
BINARY和VARBINARY類類似于CHAR和VARCHAR,不同的是它們包含二進制字符串而不要非二進制字符串。也就是說,它們包含字節(jié)字符串而不是字符字符串。
BLOB是一個二進制大對象,可以容納可變數(shù)量的數(shù)據(jù)。有4種BLOB類型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它們只是可容納值的最大長度不同。
有4種TEXT類型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。這些對應4種BLOB類型,有相同的最大長度和存儲需求。
三、數(shù)據(jù)庫中的表操作。
1.在數(shù)據(jù)庫中創(chuàng)建表。
create table 表名 (字段以及每個字段的屬性,每個字段以逗號分隔)
例:
create table tb1( id int primary key auto_increment ,name char(20),gender bit default 1, birthday date,entry_date date,job char(20),salary double(4,2) unsigned, resume text );
??!這里的primary key 屬性,就是主鍵了,那么什么是主鍵呢?
主鍵有兩個特點,就是非空并且值唯一。
auto_increment這個屬性是自增的意思,當主鍵字段是數(shù)字類型時可以使用,它可以讓數(shù)值自增。
2.查看數(shù)據(jù)庫中某個表的結構以及信息。
2.1查看一張表的表結構:desc tab_name;
例如:
desc tb1;
2.2 查看當前數(shù)據(jù)庫中所有的表:
show tables;
2.3 查看創(chuàng)建表時使用的sql語句:
show create table 表名;
例如:
show create table tb1 \G;
3.修改表結構。
3.1 給表增加一個字段:
格式: alter table tab_name add [column] 列名 類型[完整性約束條件][first|after 字段名];
#其中的first和after是可選參數(shù)(可以不用,這兩個參數(shù),如果不寫,默認添加的字段是在最后面)
#first是指添加到第一個字段的位置。
#after 是添加到某個字段的后面。
alter table user add addr varchar(20) not null unique first/after username
3.2 添加多個字段的示例:
alter table users2
add addr varchar(20),
add age int first,
add birth varchar(20) after name;
3.3 修改表中某個字段的類型:
alter table tab_name modify 列名 類型 [完整性約束條件][first|after 字段名];
例:
alter table users2 modify age tinyint default 20;
alter table users2 modify age int after id;
修改表中字段的名字:
alter table tab_name change [column] 列名 新列名 類型 [完整性約束條件][first|after 字段名];
alter table users2 change age Age int default 28 first;
3.4刪除一個字段:
alter table tab_name drop [column] 列名;
3.5修改一個表名:
rename table 表名 to 新表名;
3.6修改表字符集:
alter table student character set utf8;
3.7 刪除整張表:
drop table 表名;
3.8 為表中字段增加主鍵約束:
alter table tab_name add primary key(字段名稱,...)
3.9 刪除字段中的主鍵約束:
先刪除自增長在刪除主鍵
Alter table tb1 change id id int(11);//刪除自增長
Alter table tb1 drop primary key;//刪除主建
3.10 添加唯一索引:
格式:
alter table tab_name add unique [index|key] [索引名稱](字段名稱,...)
例:
alter table users add unique(name)
alter table users add unique key user_name(name);
3.11 添加聯(lián)合索引:
alter table users add unique index name_age(name,age);#show create table users;
3.12 刪除唯一索引:
alter table tab_name drop {index|key} index_name;
四.對表中的記錄進行操作。
insert 在表中插入記錄:
格式:insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......)
例:
insert into employee_new (id,name,birthday) values(1,'ayumi','1978-10-02');
同時插入多條數(shù)據(jù):
insert into employee_new values (4,'alvin1','1993-04-20'), (5,'alvin2','1995-05-12);
以鍵值對的方式插入數(shù)據(jù):
格式:
insert [into] tab_name set 字段名=值
例:
insert into employee_new set id=130,name="bitch jolin"
2. update 修改表中記錄:
格式:
update tab_name set field1=value1,field2=value2,......[where 語句]
例:
update employee_new set birthday="1995-09-05" WHERE id=1;
#PDATE語法可以用新值更新原有表行中的各列。
#SET子句指示要修改哪些列和要給予哪些值。
#WHERE子句指定應更新哪些行。如沒有WHERE子句,則更新所有的行.
另外一個用法示例:
--- 將suhaozhi的薪水在原有基礎上增加130元。
update employee_new set salary=salary+130 where name='suhaozhi';
3.delete 刪除表中的一個記錄:
格式:
delete from tab_name [where ....]
#delete語句如果不跟where語句則刪除整張表中的數(shù)據(jù)
#delete只能用來刪除一行記錄
#delete語句只能刪除表中的內(nèi)容,不能刪除表本身,想要刪除表,用drop。
#TRUNCATE TABLE也可以刪除表中的所有數(shù)據(jù),詞語句首先摧毀表,再新建表。此種方式刪除的數(shù)據(jù)不能在事務中恢復。
例:
刪除tb1這個表中,name字段為suhaozhi的記錄。
delete from tb1 where name='suhaozhi';
刪除表中的所有記錄:
delete from tb1;
使用truncate刪除表中記錄:
truncate table tb1;
#TRUNCATE TABLE也可以刪除表中的所有數(shù)據(jù),詞語句首先摧毀表,再新建表。此種方式刪除的數(shù)據(jù)不能在事務中恢復。
4.select 查詢語句:
select 查詢語句的基本格式:
SELECT *|field1,filed2 ... FROM tab_name
WHERE 條件
GROUP BY field
HAVING 篩選
ORDER BY field
LIMIT 限制條數(shù)
下面是關于select 查詢語句的示例:
create table tb2( id int primary key auto_increment, name varchar(20), yuwen DOUBLE, shuxue DOUBLE, yingyu double );
insert into tb2 values( 1,"aaa",98,98,99), (2,"bbb",35,98,66), (3,"ccc",59,59,62), (4,"ddd",88,89,87), (5,"eee",100,65,88);
現(xiàn)在有一張成績表,表里有五條記錄:
select * from tb2;
+----+------+-------+--------+--------+
| id | name | yuwen | shuxue | yingyu |
+----+------+-------+--------+--------+
| 1 | aaa | 98 | 98 | 99 |
| 2 | bbb | 35 | 98 | 66 |
| 3 | ccc | 59 | 59 | 62 |
| 4 | ddd | 88 | 89 | 87 |
| 5 | eee | 100 | 65 | 88 |
+----+------+-------+--------+--------+
5 rows in set (0.03 sec)
查看整張表:
select * from tb2;
查看name字段為ddd的語文和數(shù)學成績:
select yuwen,shuxue from tb2 where name="ddd";
列出所有學員的語文和英語的成績:
select yuwen,yingyu from tb2;
#其中from指定從哪張表篩選,*表示查找所有列,也可以指定一個列
#表明確指定要查找的列,distinct用來剔除重復行。
select 與數(shù)學計算表達式與as別名:
select name,yuwen+shuxue+yingyu from tb2; #顯示每個學生,語文數(shù)學英語的總和。
+------+---------------------+
| name | yuwen+shuxue+yingyu |
+------+---------------------+
| aaa | 295 |
| bbb | 199 |
| ccc | 180 |
| ddd | 264 |
| eee | 253 |
+------+---------------------+
使用字段別名后:
select name as '姓名' ,yuwen+shuxue+yingyu as '總成績' from tb2;
+--------+-----------+
| 姓名 | 總成績 |
+--------+-----------+
| aaa | 295 |
| bbb | 199 |
| ccc | 180 |
| ddd | 264 |
| eee | 253 |
+--------+-----------+
使用where語句,進行查詢過濾:
例1:找出英語成績大于90分的學員:
select * from tb2 where yingyu > 90;
例2:找出總成績大于200分的所有學員的名字和成績:
select name as '姓名' ,yuwen+shuxue+yingyu as '總成績' from tb2 where yuwen+shuxue+yingyu > 200;
+--------+-----------+
| 姓名 | 總成績 |
+--------+-----------+
| aaa | 295 |
| ddd | 264 |
| eee | 253 |
+--------+-----------+
where語句中可以使用的比較運算符補充:
> < >= <= <> !=
between 80 and 100 值在10到20之間
in(80,90,100) 值是10或20或30
like 'yuan%'
like 模糊匹配
在多個條件直接可以使用邏輯運算符 and or not
例1:顯示出語文成績在70~100分之間的學員姓名以及語文成績。
select name,yuwen from tb2 where yuwen between 70 and 100;
+------+-------+
| name | yuwen |
+------+-------+
| aaa | 98 |
| ddd | 88 |
| eee | 100 |
+------+-------+
例2:顯示出數(shù)學成績?yōu)?8,65,59的學員分之間的學員姓名以及數(shù)學成績。
select name,shuxue from tb2 where shuxue in (98,65,59);
+------+--------+
| name | shuxue |
+------+--------+
| aaa | 98 |
| bbb | 98 |
| ccc | 59 |
| eee | 65 |
+------+--------+
例3:顯示所有name為a開頭的成績信息。
select * from tb2 where name like 'a%';
+----+------+-------+--------+--------+
| id | name | yuwen | shuxue | yingyu |
+----+------+-------+--------+--------+
| 1 | aaa | 98 | 98 | 99 |
+----+------+-------+--------+--------+
例4:找出所有語文成績和數(shù)學成績都小于90分的學員信息。
select * from tb2 where yuwen < 90 and shuxue < 90;
+----+------+-------+--------+--------+
| id | name | yuwen | shuxue | yingyu |
+----+------+-------+--------+--------+
| 3 | ccc | 59 | 59 | 62 |
| 4 | ddd | 88 | 89 | 87 |
+----+------+-------+--------+--------+
例5:找出成績?yōu)榭盏膶W員。
select name from tb2 where yuwen is null
!排序:Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 語句后指定的別名。
基本格式:
select *|field1,field2... from tab_name order by field [Asc|Desc]
#Asc 升序、Desc 降序,其中asc(升序)為默認值 ORDER BY 子句應位于SELECT語句的結尾。
例:以數(shù)學成績?yōu)榛鶞逝帕小?/p>
select * from tb2 order by shuxue;
+----+------+-------+--------+--------+
| id | name | yuwen | shuxue | yingyu |
+----+------+-------+--------+--------+
| 3 | ccc | 59 | 59 | 62 |
| 5 | eee | 100 | 65 | 88 |
| 4 | ddd | 88 | 89 | 87 |
| 1 | aaa | 98 | 98 | 99 |
| 2 | bbb | 35 | 98 | 66 |
+----+------+-------+--------+--------+
例2:把所有學生的總成績,從高到低輸出:
select name as '姓名',yuwen+shuxue+yingyu as '總成績' from tb2 order by 總成績 desc;
+--------+-----------+
| 姓名 | 總成績 |
+--------+-----------+
| aaa | 295 |
| ddd | 264 |
| eee | 253 |
| bbb | 199 |
| ccc | 180 |
+--------+-----------+
分組查詢:
示例準備:
create table test_menu( id int primary key auto_increment, product_name varchar(20), price float(6,2), born_date DATE, class varchar(20) );
INSERT INTO test_menu (product_name,price,born_date,class) VALUES
("蘋果",20,20170612,"水果"),
("香蕉",80,20170602,"水果"),
("水壺",120,20170612,"電器"),
("被罩",70,20170612,"床上用品"),
("音響",420,20170612,"電器"),
("床單",55,20170612,"床上用品"),
("草莓",34,20170612,"水果");
#注意,按分組條件分組后每一組只會顯示第一條記錄.
#group by字句,其后可以接多個列名,也可以跟having子句,對group by 的結果進行篩選。
現(xiàn)在有一張表:
+----+--------------+--------+------------+--------------+
| id | product_name | price | born_date | class |
+----+--------------+--------+------------+--------------+
| 1 | 蘋果 | 20.00 | 2017-06-12 | 水果 |
| 2 | 香蕉 | 80.00 | 2017-06-02 | 水果 |
| 3 | 水壺 | 120.00 | 2017-06-12 | 電器 |
| 4 | 被罩 | 70.00 | 2017-06-12 | 床上用品 |
| 5 | 音響 | 420.00 | 2017-06-12 | 電器 |
| 6 | 床單 | 55.00 | 2017-06-12 | 床上用品 |
| 7 | 草莓 | 34.00 | 2017-06-12 | 水果 |
+----+--------------+--------+------------+--------------+
按照字段的位置進行分組:
select * from test_menu group by 5;
#這個5代表了當前表從左數(shù)第五個字段。
+----+--------------+--------+------------+--------------+
| id | product_name | price | born_date | class |
+----+--------------+--------+------------+--------------+
| 4 | 被罩 | 70.00 | 2017-06-12 | 床上用品 |
| 1 | 蘋果 | 20.00 | 2017-06-12 | 水果 |
| 3 | 水壺 | 120.00 | 2017-06-12 | 電器 |
+----+--------------+--------+------------+--------------+
#從左數(shù)第5個字段是class,按分組條件分組后每一組只會顯示第一條記錄。
對購物表按類名class字段分組后顯示每一組商品的價格總和:
select class,sum(price) from test_menu group by class;
+--------------+------------+
| class | sum(price) |
+--------------+------------+
| 床上用品 | 125.00 |
| 水果 | 134.00 |
| 電器 | 540.00 |
+--------------+------------+
對購物表按類名class字段分組后顯示每一組商品價格總和超過150的商品。
select class,sum(price) from test_menu group by class having sum(price) > 150;
+--------+------------+
| class | sum(price) |
+--------+------------+
| 電器 | 540.00 |
+--------+------------+
#!!!! 在這里特別強調(diào)一點!having和where雖然都可以對查詢結果做過濾??!但是它們是有區(qū)別的!
where只能用于分組前的篩選?。?而having則可以用于分組后的篩選!這是因為having可以使用聚合函數(shù)??!where中不可以?。。。。。∵@點牢記!
常用的聚合函數(shù)補充:
一般情況下,聚合函數(shù)會配合分組查詢?nèi)ナ褂谩?br />
#把要求的內(nèi)容查出來再包上聚合函數(shù)即可。
count 統(tǒng)計行個數(shù)。
例1:統(tǒng)計這張表一共有多少行記錄
select count(*) from test_menu;
例2:統(tǒng)計數(shù)學成績大于70的有多少條記錄。
select count(*) from tb2 where shuxue > 70;
例3:統(tǒng)計總分大于200的記錄有多少?
select count(*) from tb2 where yuwen+shuxue+yingyu > 200;
2.sum 統(tǒng)計滿足條件的行的和。
例1:統(tǒng)計這個班的語文總成績。
select sum(yuwen) as '語文總成績' from tb2;
+-----------------+
| 語文總成績 |
+-----------------+
| 380 |
+-----------------+
例2:統(tǒng)計這個班各科的總成績。
select sum(yuwen),sum(shuxue),sum(yingyu) from tb2;
例3:求班級語文成績的平均值。
select sum(yuwen)/count(*) from tb2;
3.avg求平均值。
例1: 求班級語文成績的平均值。
select avg(yuwen) from tb2;
例2: 求班級總和的平均分。
select avg(yuwen+shuxue+yingyu) from tb2;
4.max&min 求最高值或者最低值。
例:
select max(yuwen+shuxue+yingyu) from tb2;
select min(yuwen+shuxue+yingyu) from tb2;
5.ifnull 將空值轉(zhuǎn)換為指定的值。
注意?。。。?!null 和所有的數(shù)計算都是null,所以需要用ifnull將null轉(zhuǎn)換為0?。?!
例:ifnull(yuwen,0)
6.limit 指定查找出記錄的數(shù)量。
select * from tb2 limit 1; #只顯示出結果的第一行。
select * from tb2 limit 2,5; #跳過前兩行,顯示接下來的后5行。
7.REGEXP 使用正則表達式進行查詢。
select * from tb2 where name regexp '^a';
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。