語法:CREATE DATABASE[IF NOT EXISTS] db_name
sql>CREATE DATABASE mydb1;
sql>CREATE DATABASE IF NOT EXISTS csdn character SET GBK;
sql>CREATE DATABASE mydb3 character SET GBK COLLATE gbk_chinese_ci;
查看當前數據庫服務器中的所有數據庫
sql>SHOW DATABASES;
查看前面創建的csdn數據庫的定義信息
sql>SHOW CREATE DATABASE csdn;
查看服務器中的數據庫,並把csdn的字符集修改爲utf8;
sql>ALTER DATABASE csdn character SET utf8;
刪除
語法:DROP DATABASE[IF EXISTS] csdn;
sql>DROP DATABASE IF EXISTS csdn;
ALTER TABLE user CHANGE name uaername varchar(100);
DML操作
DML是對錶中的數據進行增、刪、改的操作。 不要與DDL混淆了
主要包括:INSERT、UPDATE、DELENTE
插入操作:INSERT:
語法INSERT INTO 表名(列名1,列名2…) values(列值1、列值2…)
主意:列名與列值的類型、個數、順序要一一對應。
#一次一列
insert into user(id,username,age,address) values(1,'waking',22,'安徽');
#一次多列
insert into user(id,username,age,address) values(2,'w',22,'北京');
insert into user(id,username,age,address) values(3,'wa',22,'安徽');
insert into user(id,username,age,address) values(4,'wak',22,'杭州');
#一次多列
insert into user(id,username,age,address)
values(2,'w',22,'北京'),(3,'wa',22,'安徽'),(4,'wak',22,'杭州');
修改操作:UPDATE
語法:UPDATE 表名 SET 列名1=列值1,列名2=列值2…WHERE 列名=值
練習:
#將所有學生的年齡修改爲25.
update user set age = 25;
#將id爲1的地址修改爲‘杭州’
update user set address = '杭州' where id=1;
#將姓名爲‘w’的學生年齡改爲23,地址改爲‘河南’
update user set age=23,address='河南' where username = 'w';
#將所有學生的年齡加5歲
update user set age=age+5;
刪除操作:DELECT
語法:DELECT FROM 表名 【WHERE 列名=值】
練習
#刪除表中姓名爲‘w’的記錄
delete from user where username='w';
#刪除表中所有記錄
DELETE FROM user;
#使用truncate刪除表中記錄。(先把表刪除,然後再創建空表)
truncate table user;
#DELETE 刪除表中的數據,表結構還在,刪除後的數據使用日誌可以找回
#TRUNCATE刪除是把表直接DROP掉,然後再創建一個同樣的新表
#TRUNCATE刪除的數據不能找回。執行速度比DELETE快
講到這裏介紹客戶端工具
爲了更方便用戶操作和使用mysql數據庫引入客戶端工具
SQLyog的使用
Navicat的使用
DQL數據查詢
數據庫執行DQL語句不會對數據進行改變,而是讓數據庫發送結果集給客戶端
查詢返回的結果集是一張虛擬表
查詢關鍵字:SELECT
語法:SELECT 列名 FROM 表名【WHERE–>GROUP BY—>HAVING–>ORDER BY–>LIMIT】
簡單查詢
#創建表stu
CREATE TABLE stu (
sid CHAR(6),
sname VARCHAR(50),
age INT,
gender VARCHAR(50)
);
#添加數據
INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);
#創建僱員表
CREATE TABLE emp(
empno INT,
ename VARCHAR(50),
job VARCHAR(50),
mgr INT,
hiredate DATE,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT );
#添加數據
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
#創建部門表
CREATE TABLE dept(
deptno INT,
dname VARCHAR(14),
loc VARCHAR(13)
);
#添加數據
INSERT INTO dept VALUES(10, '財務部', 'beijing');
INSERT INTO dept VALUES(20, 'java開發部', 'tianjin');
INSERT INTO dept VALUES(30, '測試部', 'shanghai');
INSERT INTO dept VALUES(40, '銷售部', 'shenzheng');
#查詢所有列*表示所有列
SELECT * FROM user;
#查詢指定列
SELECT id username FROM user;
條件查詢
條件查詢就是在查詢是給出WHERE子句,在WHERE子句中可以使用如下運算符及關鍵字:
比較運算符
=、!=、<>、<、<=、>、>=;
BETWEEN...AND
IN(set);
IS NULL;
關鍵運算符
AND
OR
NOT
算術運算符
+ - * / %
查詢性別爲女,並且年齡小於50的記錄
SELECT * FROM stu WHERE gender='female' AND age<50;
查詢學號爲S_1001,或者姓名爲liSi的記錄
SELECT * FROM stu WHERE sid='S_1001' OR sname='liSi';
查詢學號爲S_1001,S_1002,S_1003的記錄
SELECT *FROM stu WHERE sid IN('S_1001','S_1002','S_1003');
#等同於
SELECT * FROM stu WHERE sid='S_1001' OR sid ='S_1002' OR sid='S_1003';
查詢學生不是S_1001,S_1002,S_1003的記錄
SELECT * FROM stu WHERE sid NOT IN('S_1001','S_1002','S_1003');
查詢年齡爲null的記錄
SELECT * FROM stu WHERE age IS NULL;
查詢年齡在20到40之間的學生記錄
SELECT * FROM stu WHERE age>20 AND age<40;
SELECT * FROM stu WHERE age BETWEEN 20 AND 40;
查詢性別非男的學生記錄
SELECT * FROM stu WHERE gender!='male';
SELECT * FROM stu WHERE gender<>'male';
SELECT * FROM stu WHERE NOT gender='male';
查詢姓名不爲null的學生記錄
SELECT * FROM stu WHERE sname IS NOT NULL;
SELECT * FROM stu WHERE NOT sname IS NULL;
模糊查詢
當想查詢姓名中包含a字母的學生時就需要模糊查詢了。模糊查詢需要使用關鍵字LIKE
通配符:
_:任意一個字符
%:任意0~n個字符
查詢姓名由5個字符構成,並且第5個字符爲‘i’的學生記錄
SELECT * FROM stu WHERE sname LIKE '____i';
查詢姓名以‘z’開頭的學生記錄
SELECT * FROM stu WHERE sname LIKE 'z%';
#其中'%'匹配0~n個字符
查詢姓名中第2個字符爲‘i’的學生記錄
SELECT * FROM stu WHERE sname LIKE '_i%';
查詢姓名中包含‘a’字符的學生記錄
SELECT * FROM stu WHERE sname LIKE '%a%';
字段控制查詢
去除重複記錄DISTINCT
SELECT DISTINCT sal FROM emp;
SELECT DISTINCT sal,comm FROM emp;
查看僱員的月薪與佣金之和
#注意:因爲sal和comm兩列的類型都是數值類型,所以可以加運算
SELECT *,sal+comm FROM emp;
#comm列有很多記錄的值爲null,因爲任何東西與null相加結果還是null
SELECT *,sal+IFNULL(comm,0) FROM emp;
給列名添加別名
#as
SELECT *,sal+IFNULL(comm,0) AS total FROM emp;
#as可省略
SELECT *,sal+IFNULL(comm,0) total FROM emp;