特別提醒就是column_name是列名
table_name是表名
接下來直接上代碼
SHOW DATABASES;
CREATE DATABASE zhiyong;
USE zhiyong;
CREATE TABLE database1(id INT,NAME VARCHAR(8),address VARCHAR(20),url VARCHAR(25),birthady DATA,employee CHAR(6),
sex CHAR(2),age INT,height INT)CHARACTER SET utf8;
CREATE TABLE database1
(
id INT,
myname VARCHAR(6),
sex CHAR(1),
age INT,
birthday DATE,
address VARCHAR(20),
employee CHAR(6)
)CHARACTER SET utf8;
SHOW TABLES;
DESC database1;
SELECT * FROM database1;
//向表中添加數據;
INSERT INTO database1 VALUES(123456,'李華','男','18','2000-1-16','廣東省','打手');
SELECT * FROM database1;
INSERT INTO database1 VALUES(123457,'張飛','男','30','2000-1-16','廣東省','保安');
INSERT INTO database1 VALUES(123457,'關羽','男','32','2000-1-16','江蘇省','財神');
INSERT INTO database1 VALUES(123459,'劉備','男','30','2000-1-16','四川','老闆');
INSERT INTO database1 VALUES(1234510,'趙雲','男','30','2000-1-16','廣東省','保安');
SELECT * FROM database1;
//在數據庫中修改表
ALTER TABLE database1 ADD url VARCHAR(20);
//向數據庫中添加了一列
INSERT INTO database1(url) VALUES('http://www.baidu.com');
SELECT * FROM database1;
//修改url的列將url的列名改爲60
ALTER TABLE database1 MODIFY url VARCHAR(60);
DESC database1;
//刪除列的命令
ALTER TABLE database1 DROP url;
//修改表名
RENAME TABLE database1 TO db1;
SHOW TABLES;
ALTER TABLE db1 ADD url VARCHAR(30);
INSERT INTO db1(url)VALUES('http://www.baidu.com');
SELECT * FROM db1;
//向表中添加唯一約束
ALTER TABLE db1 ADD UNIQUE(url);
DESC db1;
//添加唯一約束並起名字
ALTER TABLE db1 ADD CONSTRAINT mydb1 UNIQUE(sex,myname,id);
DESC db1;
//刪除約束
ALTER TABLE db1 DROP INDEX mydb1;
desc db1;
//創建主鍵約束
alter table db1 add constraint myself primary key(sex);
desc db1;
alter table db1 add primary key(id);
//創建外鍵約束
//首先創建一個表
create table db2(id int,name varchar(5),birthday date)character set utf8;
select * from db2;
insert into db2 values(6666,'hu','2000-1-16');
alter table db1 add foreign key(id) references db2(id);
//創建一個db3的表用來實驗默認約束
create table db3
(
id int ,
age int,
name varchar(10),
address varchar(20),
birthday date,
sex char(3),
url varchar(20) default 'http://www.baidu.com'
)character set utf8;
//查看錶結構
desc db3;
//表的查詢
select * from db3;
//向表中添加數據
insert into db3 values(88888,20,'孫悟空','花果山','1600-12-12','男','www.souhu.com');
select * from db3;
INSERT INTO db3 VALUES(88889,21,'李白','大唐','1300-12-12','男','www.baidu.com');
INSERT INTO db3 VALUES(88889,21,'杜甫','大唐','1300-12-13','男','www.xinlang.com');
//查詢表
select * from db3;
//向表中添加默認約束
alter table db3 alter name set default 'huangtao';//這次添加默認約束失敗
desc db3;
desc db3;
//刪除約束default
alter table db3 alter name drop default;//確認刪除
//創建一張檢查約束專用的表
create table db4
(
name varchar(10) not null,
salary int,
age int,
primary key(age)
);
desc db4;
# //向表中添加一行數據
insert into db4 values('check',10000,18);
desc db4;
alter table db4 add constraint hutao check(age>15);#//約束添加成功
desc db4;
select * from db4;
# //sql中的select top子句規定要返回的記錄數目
select * from db3;
select age from db3 limit 2;#規定要返回的記錄數目取頭兩條記錄
#sql中的通配符 用於在where子句中搜索指定的模式
select * from db1;
select * from db1 where birthday like '%2';
#返回任意的字符
desc db2;
#select * from db2 where type like '_ir_';
select * from db2;
select * from from db2 where id like '_6';
select * from db3;
select * from db3 where url like '_m';
select url from db3 where url like '_m';
select * from db3 where id like '^[^b]' ;#不一b開頭的網站
select id from db3 where id like '^[A-W]';#以a-w開頭的網站
#sql中的in操作符在where子句中規定多個值
#實例 語法select column-name from table_name where column_nmae in values(value1....);
/**
sql 中的union操作符用於將返回兩條或多條語句的結果集條件,返回的語句類型要既有相同的長度,
相同的數據類型,相同的排列順序,相同數目的列表達式,長度不一定相同
語法:
select column_name from table_name
union
select column_name from table_name
返回相同的結果集時用 union all
select column_name from table_name
where condition
union all
select column_nmae from table_name
**/
#查詢表
select * from db5;
select * from db6;
#實例
select * from db5
union
select * from db6;
/*
sql中的select into子句將一個表中的數據複製到另一個表
從一個表中複製數據並插入另一個表
語法:
select column_name into
newtable in exteranandb
from table_name;
*/
select * from db2;
select * from db3;
# select * into db5 in name from db3;
/*
將表中的數據插入到新的表中
select * into newtable from table_name(原表);
將表中的列插入到新的表中
select column_name into newtable from table_name;
使用in操作符將數據複製並插入到新的數據庫中
select * into newtable in 數據庫名 from table_nmae;
#還可以複製指定用戶達到新的表中
select column_anme into newtable from table_name where condition;
*/
select * from db5;
select * into bd6 from db5;
#在執行該語句時報錯原因是mysql數據庫不支持該語句操作
#解決方法是使用該語句Create table Table2 (Select * from Table1);
select * from db5;
create table bd6(select * from db5);
select * from db6;
#select into from 子句可以在另一種情況向創建一個新的空表僅僅要添加where子句使查詢返時沒有數據
/*
語法: select column_name into newtable from table where 1=0;
*/
#sql 中的insert into語句將一個表中的數據從一個表中複製到另一個表並且插入到現有的表中不會有任何的影響
/*
語法:insert into table1 select * from table2將表二中的所有數據複製到表一中
語法:insert into table1 column_nmae1 select column_name from table2;將表二中的列複製到表一中的列中//
*/
insert into db5 select * from db5;
desc db6;
select * from db5;
select * from db3;
insert into db3 id select id from db3;//此代碼有誤。
#sql中的drop index語句用於刪除數據表中的索引
#mysql的語法 alter table table_name drop index index_name;
#drop index 語句刪除數據表中的索引 alter table table_name drop index_name;
select * from db5;
alter table db5 drop index id;//錯誤該表中沒有索引
#刪除數據庫中的表:drop table table_name;
#sql中刪除數據庫語法 drop database database_name;
#僅僅是刪除數據表中的數據並不是刪除數據表本身 turncate table table_name;/turncate database database_name;
#alter 用於現有數據表中添加修改或刪除列
#alter table table_name drop column column_name刪除刪除表中的列
#alter table table_name add column_name datatype;向數據表中添加列;
#在sql中更改數據表中的類型mysql和oracle中使用modify關鍵字
#語法:alter table table_name modify column column_name datatype;
#實例:
desc db3;
alter table db3 modify column name char(10);
#向數據表中添加列
alter table db3 add salary int ;
/*
sql 中的into increment字段
會在新的記錄插入表中時生成一個唯一的數字記錄
我們通常希望每次插入新的記錄時會主動創建主鍵字段的值
我們可以在表中創建一個自動的增量 auto-increment
*/
#語法:
/*
create table table_name
(
column_name datatype auto-increment,
.............
);
*/
create table db7
(
name char(6) ,
age int auto-increment,
sex char(1),
salary int
primary key(age)
)character set utf8;
#添加了自動增量的值我們在表中插入字段時不需要爲添加了自動增量的列添加值他會自動添加值
#sql中null值的處理:
/*
sql中的null值表示丟失的未知部分
sql 中默認情況下列可以保存null值
sql中有is null 和 is not null是一對操作符
如果sql中的列是可選的那麼我們可以插入一個記錄或更行一個記錄
sql中的null值是sql中的默認佔位符
sql中不可以將null和0進行比較因爲他們是不等價的
*/
#sql中null值的測試不能使用比較操作符而要使用is null 或 is not null
#向列中添加一個null值語法 select column_name1,column_name.... from table_name where column_name is/is not null null;
select * from db6;
select id,name,age,birthday,address,country from db6 where country is null;
desc db6;
#sql中的別名 sql中通常使用as關鍵字給表起別名
/*
sql中的別名提高了程序的可讀性方便數據庫管理員對數據庫的管理
數據庫中的列名是臨時的實際名稱不會發生變化
sql中的別名僅僅存在於查詢期間
別名的使用是在特定的sql語句中重命名的表
別名用於對特定的sql查詢重命名的列
*/
語法:select column_name as bieming
from table_name
where condition;
select column_name
from table_name as bieming
where condition;
#創建表並給表起別名
create table db8
(
id int,
name varchar(6),
telephone int,
address varchar(15),
sex char(2),
birthday date ,
salary int not null
)character set utf8;
select * from db8;
select telephone as tp from db8;
要去除 EMPLOYEES 表中的主鍵約束,可以使用下述命令
#在sql中我們如何刪除約束使用alter table table_name drop constraint employee_pk;
/*
sql中的克隆數據表在一些情況下你可能需要拷貝某張表但是創建一張表又不能滿足你的需要
因爲複製的表可能需要一樣的索引一樣的數據類型因此mysql中推出了克隆數據表來幫你解決該問題
mysql中使用show create table table_name命令來獲取指定原結構索引等信息創建的table語句
*/
show create table db8 ;
#將語句中的表名改爲需要克隆的表名你就可以獲得與原結構相同的表如果你想獲取表中的數據使用 insert into select語句
/*
mysql中的索引
創建索引的語句是create index index_name on table_name(column_name);//單列索引
sql中的唯一索引不僅可以保持數據的完整性還可以提高數據的查詢效率單數數據中的唯一索引不能添加重複值
創建唯一索引的語法:
create unique index index_name on table_name (column_name);
sql中的聚集索引表中的多個列中創建:
create index index_name on table_name (column_name1,column_name2...);
sql中的隱式索引:
是由數據庫服務器在創建某些對象是生成的主鍵約束和唯一約束的數據庫會自動生成索引
刪除索引的命令:
drpo index table_name.index_name;
刪除索引時要特別注意因爲數據庫的性能可能會因此減低或提高
*/
select * from db5;
create index 66 on db5;//
/*
sql中的函數aggeregate函數
avg ();返回平均值
count ()返回行數
min()返回最小值
max()返回最大值
sun()返回和
first() 返回第一個記錄的值
last() 返回最後一個記錄的值
sql中的scalar函數基於輸入值返回一個單一的值
UCase()將某個字段轉換爲大寫
lcase()將某個字段轉換爲小寫
mid() 從某個文本字段提取字符
len() 返回某個文本字段的長度
round() 對某個指定的小數位進行四捨五入
now() 返回當前系統的日期和時間
format() 格式化某個日期的顯示方式
sql中max函數的語法
select max(coiumn_name)
from table_name
where condition;
2:
select min(column_name)
from table_name
where condition;
count 的使用:返回符合條件的指定的行數
語法:返回指定列中值的數目null不記
select count(column_name)
from table_name as 別名
where condition;
語法:2 返回表中的記錄數
select count(*) from table_name
語法3:返回指定列中不同值的數目
select count(distinct column_name) from table_name
語法4:返回指定表中不同數目的值//錯誤
select count(distinct * )from table_name
sql關於平均數的語法“
select avg(column_name)
from table_name
where condition;
sql 中的sun函數:
select sun(column_name)
from table_name
where condition;
*/
#使用max的實例
select * from db5;
select max(id) as maxlarge from db5;
#count函數的實例1
select count(country) from db5;//8行
#count實例2:
select count(*) from db5;
#count實例3:
select count(distinct name) from db3;//3
#count實例4:
select count(distinct *) from db5;//錯誤
/*
sql中的返回索引關鍵字
fleld();FIELD()函數返回的索引(從1開始的位置)的str在str1,str2,str3,...列表中。如果str沒有找到,
則返回0。
就是用第一個參數str,跟後面的N個字符串參數中尋找,如果尋找到一模一樣的字符串,則返回其索引位置
fleld(str,str1,str2...);
SQL 中的group by()子句常常需要結合aggregate函數根據一個或多個列的結果集進行分組
語法:select column_name from table_name where condition group by column_name;
*/
#實例:
select * from db5;
select country from db5 group by country; //china
#實例:
select max(age) from db5 group by age;
/*
sql中添加having函數的作用因爲where子句不能和集合函數一起使用
where關鍵字不能用於聚合函數
having子句添加到sql中可以用於聚合函數
語法:
select column_name from table_name
where condition
group by column_name
having condition
order by column_name;
#having可以說是在使用聚合函數的時候替代where關鍵字
*/
#實例:
select * from db2;
select count(id) from db2
group by id
having count(id) >666;//count(id)
#sql中的字符串
#lower和lcase將字符串中的大寫字符的字母轉換爲小寫字母
select lower('HELLO WORD my name is huangyu i want to a 女朋友');
select lcase('HELLO WORD MY NAME IS HUANG TAO I LOVE YOU');
#upper和Ucase將字符串中的小寫字母轉換爲大寫字母
select upper('hi my name is huang tao i come from huang dong in china i love eat');
select ucase('hello word is huang tao i come from huang tao in china i love eat');
#sql中的mid函數用於從文本字段中提取字符
mid();
#實例:
select mid(column_name,start,length);
#column_name 提取字段的字符 start 開始的位置 要返回的字符數如果省略mid函數返回剩餘文本
select mid(age,1,8)from db5;
select * from db5;
#sql中的len函數 返回文本字段中值的長度
select id, len(name)from db5;//錯誤
#sql中的round函數把數值字段舍入爲指定的小數數位
#語法:select round(column_name,要舍入的小數數位) from table_name;
#實例:
select round(age,2) from db5;
select * from db5;
#sql中的null函數now()返回當前日期和時間
#實例:
select now();//2020-04-16 15:03:50
#語法: select now() from table_name;
select id ,name, now() from db5;
#sql中的format函數
#語法:select format(時間 格式) from table_name;
#實例:SELECT ProductName, Price, FORMAT(Now(),'YYYY-MM-DD') AS PerDate
FROM Products;
select * from db5;
select id,name,age,format('2020-4-15','YYYT-MM-DD')from db5;
#sql中的sqrt函數用於計算任何數的平方根
#語法:select sqrt(數值);
select sqrt(66);//8.1240384...
#你看到的是浮點數因爲sql是以浮點數類型進行平方根進行計算的
#sql中的rand函數用於產生0和之間的隨機數
#語法:select rand(),rand(),rand();/select rand(1),rand(2),rand(3);
/*當以某個整數值作爲參數來調用的時候,RAND() 會將該值作爲隨機數發生器的種子。
對於每一個給定的種子,RAND() 函數都會產生一列可以復現的數字
*/
select rand(),rand(),rand();
select rand(1),rand(2),rand(3);
#sql中的order by rand()用來對一組記錄進行隨機化排序
select age from db5 order by rand();
/*
sql中的concat函數用於將兩個字符串拼接爲一個字符串
select concat('hfdjih','hfduier');
還可以用於將表中的字段連接在一起
select concat(id,name,salary)from db5
*/
select concat('hello','word');//helliword
select * from db3;
select concat(id,age,name)from db3;
/*
MySQL 也擁有類似 ISNULL() 的函數。不過它的工作方式與微軟的 ISNULL() 函數有點不同。
在 MySQL 中,我們可以使用 IFNULL() 函數,如下所示:
*/
#SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函數
#語法:SELECT column_name,column_name*(column_name+IFNULL(column_name,0))
#FROM table_name
/*
sql中的字符串替代函數 sql replace()
語法:update table_name set column_name1=replace(column_name1,'原值',‘替代值’);
replace函數的定義 replace(original-string,search-string,replace-string);
*/
select * from db5;
update db5 set age=replace(age,'15','25');
/*
sql中trim函數去除字符串頭尾空格
mysql中含有:rtrim將所有字符串結尾的空白移除
mysql中含有:ltrim將所有字符串起頭的空白移除
select trim('');
select ltrim('');
select ltrim('');
*/
select trim( ' helloword ' );
select ltrim ( ' helloword ' );
select rtrim( ' helloword ' );