3. MySQL—SQLyog使用教程

这里使用的是企业版,因cmd使用命令不方便管理,所以使用SQLyog更为方便

执行SQL语句命令:

先选中所要执行的命令,点击左上角 “Execute Current Query”

3. MySQL—SQLyog使用教程_第1张图片


1. 创建工作

      1.1 使用指定数据库

USE blog;

      1.2 创建表

-- 创建表
CREATE TABLE teacher(
	id INT,
	NAME VARCHAR(20)
);

CREATE TABLE student(
	id INT,
	NAME VARCHAR(20),
	gender VARCHAR(2),
	age INT
);

      1.3 删除表

-- 删除表
DROP TABLES teacher;
DROP TABLES student;

      1.4 查看所有表

-- 查看所有表
SHOW TABLES;

      1.5 查看表中字段

-- 查看表中字段
DESC teacher;
DESC student;

      1.6 增删查改

-- **************** 增删改查 **************** --
-- 1.1 增加数据(全部字段、部分字段)
INSERT INTO student  VALUES(1,'张三','男',20);
INSERT INTO student  VALUES(2,'李四','男',18);

INSERT INTO student(id,NAME) VALUES(3,'王五');
INSERT INTO student(id,NAME) VALUES(4,'麻子');


-- 1.2 修改数据(所有数据、部分数据)
UPDATE student SET gender='女';
UPDATE student SET age=18;

UPDATE student SET gender='男' WHERE id=1;  -- 修改id为1的学生性别为男
UPDATE student SET age=20 WHERE id=2;

UPDATE student SET gender='男',age=30 WHERE id=3;


-- 1.3 删除数据
SELECT *FROM student;    -- 可带条件删除,不能删除后约束,可删数据
TRUNCATE TABLE student;  -- 不能带条件删除,可删约束,也可删数据

DELETE FROM student WHERE id=4;


-- 查询数据
SELECT * FROM student;

 

2. 查询数据

      2.1 查询所有列

SELECT *FROM student;

      2.2 查询指定列

SELECT id,NAME FROM student; 

      2.3 查询时指定别名(多表查询用别名方便)

SELECT id AS '编号',NAME AS '姓名' FROM student AS stu;

      2.4 查询时添加常量列(查询student表时添加一个班级列)

SELECT id,NAME,gender,age,'java帮'AS '班级' FROM student;

      2.5 查询时合并列(数值:servelt+jsp总成绩)

ALTER TABLE student ADD servelt INT,ADD jsp INT;
ALTER TABLE student ADD address VARCHAR(20);
DESC student;
UPDATE student SET servelt=10,jsp=85,address='啦啦啦' WHERE id=1;
UPDATE student SET servelt=20,jsp=95,address='' WHERE id=2;
SELECT id,NAME,(servelt+jsp) AS '总成绩' FROM student;

      2.6  查询时取出重复信息

SELECT DISTINCT gender FROM student;
SELECT DISTINCT (age) FROM student;

      2.7  条件查询 

-- 2.7 条件查询
-- 逻辑:and、or  
-- 比较:>  <  >=  <=  =  <>  between and
-- 判空:null、空字符串:is [not] null、 ==''、 <>''
-- 模糊:like

-- 查询 id=2 和 姓名=李四 的学生信息(逻辑)
SELECT * FROM student WHERE id=2 AND NAME='李四';
-- 查询 id=2 或 姓名=李四 的学生信息(逻辑)
SELECT * FROM student WHERE id=4 OR NAME='李四';

-- 查询 servelt>70 的学生信息
SELECT * FROM student WHERE servelt>10;
-- 查询 55 AND servelt<20;
-- 查询 女生 信息
SELECT * FROM student WHERE gender<>'男';
-- 查询 地址为空(NULL、空字符串) 的学生信息
SELECT * FROM student WHERE address IS NULL OR address='';
SELECT * FROM student WHERE address IS NULL;
SELECT * FROM student WHERE address='';
-- 查询 地址不为空(NULL、空字符串) 的学生信息
SELECT * FROM student WHERE address IS NOT NULL AND address<>'';

-- 查询 姓'张' 的学生信息
-- %:任意个字符
-- _:一个字符
SELECT * FROM student WHERE NAME LIKE '张%';

-- 查询 姓'麻'且名字只有两个字 的学生信息
SELECT * FROM student WHERE NAME LIKE '麻_';

       2.8 聚合查询

-- 2.8 聚合查询
-- 常用聚合函数:sum、avg、max、min、count

-- 查询学生 servelt 的总成绩
SELECT SUM(servelt) AS 'servelt总成绩' FROM student;
-- 查询学生 servelt 的平均分
SELECT AVG(servelt) AS 'servelt平均分' FROM student;
-- 查询学生 servelt 的最高分
SELECT MAX(servelt) AS 'servelt最高分' FROM student;
-- 查询学生 servelt 的最低分
SELECT MIN(servelt) AS 'servelt最低分' FROM student;
-- 查询学生数量
SELECT COUNT(*) AS '学生数量' FROM student;  -- 不包括含NULL的数据
SELECT COUNT(id) AS '学生数量' FROM student;

       2.9 分页查询 

-- 2.9 分页查询
-- 查询1、2条记录(limit 起始行,查询几行)
SELECT * FROM student LIMIT 0,2;
-- 查询3、4条记录(limit 起始行,查询几行)
SELECT * FROM student LIMIT 2,2;

        2.10 排序查询

-- 2.10 排序查询
-- order by 字段 asc/desc
-- asc :正序   数值:递增  字母:自然顺序
-- desc:逆序   数值:递减  字母:自然逆序
-- 字段数据相同,则按记录顺序
-- 按照 id 顺序排序
SELECT * FROM student ORDER BY id;  -- 默认正序
SELECT * FROM student ORDER BY id ASC;
SELECT * FROM student ORDER BY id DESC;
-- 按照 servlet 正序,jsp逆序 
SELECT * FROM student ORDER BY servelt ASC,jsp DESC;

         2.11 分组查询

-- 2.11 分组查询后统计
-- 查询男女人数(先分组,再统计)
SELECT gender,COUNT(*) FROM student  GROUP BY gender;


-- 2.12 分组查询后筛选
-- 查询总人数大于2的性别
-- 分组之前条件用where,分组之后条件用having
SELECT gender,COUNT(*) FROM student  GROUP BY gender HAVING COUNT(*)>2;

3. 约束

         3.1 非空:NOT NULL

-- 3.1 非空:NOT NULL  (限制字段必须赋值,非空不能赋null)
CREATE TABLE student2(
	id INT,   
	NAME VARCHAR(20),
	gender VARCHAR(2) NOT NULL, 
	age INT
);

INSERT INTO student2(id,NAME) VALUES(1,'婉儿');
INSERT INTO student2(id,NAME,gender) VALUES(2,'后裔',NULL);
INSERT INTO student2(id,NAME,gender) VALUES(3,'李白','男');

SELECT *FROM student2;
DROP TABLE student2;

         3.2 唯一:UNICODE

-- 3.2 唯一:UNICODE
CREATE TABLE student3(
	id INT UNICODE,    
	NAME VARCHAR(20),
	gender VARCHAR(2) NOT NULL,  
	age INT
);
INSERT INTO student3(id,NAME,gender) VALUES(1,'李白','哈哈哈');
INSERT INTO student3(id,NAME,gender) VALUES(1,'李信','哈哈哈');

SELECT *FROM student3;
DROP TABLE student3;

         3.3 主键:PRIMARY KEY (非空、唯一)

-- 3.3 主键:PRIMARY KEY (非空、唯一)
CREATE TABLE student4(
	id INT PRIMARY KEY,  -- 主键
	NAME VARCHAR(20),
	gender VARCHAR(2) NOT NULL,  -- 非空
	age INT
);
INSERT INTO student4(id,NAME,gender) VALUES(2,'孙尚香','哈哈哈');
INSERT INTO student4(id,NAME,gender) VALUES(2,'香香姐','哈哈哈');

SELECT *FROM student4;
DROP TABLE student4;

         3.4 自增长:AUTO_INCREMENT(自动递增)

-- 3.4 自增长:AUTO_INCREMENT(自动递增)
CREATE TABLE student5(
	id INT PRIMARY KEY AUTO_INCREMENT,  
	NAME VARCHAR(20),
	gender VARCHAR(2) NOT NULL, 
	age INT
);
INSERT INTO student5(NAME) VALUES('李白');
INSERT INTO student5(NAME) VALUES('李二白');
INSERT INTO student5(NAME) VALUES('李小白');

CREATE TABLE student6(
	id INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT,  -- ZEROFILL:0填充
	NAME VARCHAR(20),
	gender VARCHAR(2) NOT NULL, 
	age INT
);
INSERT INTO student6(NAME) VALUES('李白');
INSERT INTO student6(NAME) VALUES('李二白');
INSERT INTO student6(NAME) VALUES('李小白');

-- 不能影响自增长约束
DELETE FROM student6;
-- 能影响自增长约束
TRUNCATE TABLE student6;

SELECT *FROM student5;
SELECT *FROM student6;
DROP TABLE student5;
DROP TABLE student6;

             3.5 外键:解决数据冗余高的问题——独立出一张表

CREATE TABLE employee(
	id INT PRIMARY KEY,
	empName VARCHAR(20),
	deptName VARCHAR(20)  -- 部门名称
);

INSERT INTO employee VALUES(1,'李大白','软件开发部');
INSERT INTO employee VALUES(2,'李二白','软件开发部');
INSERT INTO employee VALUES(3,'李小白','应用开发部');

SELECT * FROM employee;

-- 添加员工  部门名称数据冗余高
INSERT INTO employee VALUES(4,'孙尚香','软件开发部');
-- 解决数据冗余高:为冗余字段写入一张独立的表--部门表
CREATE TABLE dept(
	id INT PRIMARY KEY,
	deptName VARCHAR(20)  -- 部门名称
);
INSERT INTO dept(id,deptName) VALUES(1,'软件开发部');
INSERT INTO dept(id,deptName) VALUES(2,'应用开发部');
INSERT INTO dept(id,deptName) VALUES(3,'应用维护部');
-- 修改员工表
CREATE TABLE employee(
	id INT PRIMARY KEY,
	empName VARCHAR(20),
	deptName INT  -- 部门名称
);
INSERT INTO employee VALUES(1,'李大白',1);
INSERT INTO employee VALUES(2,'李二白',2);
INSERT INTO employee VALUES(3,'李小白',1);

SELECT * FROM employee;
SELECT * FROM dept;

DROP TABLE employee;
DROP TABLE  dept;

             3.6 级联:ON UPDATE/DELETE CASCADE

                   要修改副表的关联数据才能修改主表数据,希望可以直接修改主表,从而影响副表数据

-- 要修改副表的关联数据才能修改主表数据
-- 希望可以直接修改主表,从而影响副表数据
-- 级联:ON UPDATE/DELETE CASCADE  (以外键为基础)
CREATE TABLE employee(  -- 副表
	id INT PRIMARY KEY,
	empName VARCHAR(20),
	deptId INT,  -- 部门名称-->部门ID
	-- 声明一个外键  
	CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE
	--             外键名称                外键           参考表(参考字段)   级联修改       级联删除
);
UPDATE dept SET id=4 WHERE id=3;  -- 级联删除,在表dept中把id由3改成4,级联到表employee
DELETE FROM dept WHERE id=1    ;  -- 级联删除,在表dept中把id为1的部门删除,级联到表employee

 

你可能感兴趣的:(MySQL)