##注:需要在cmd管理员命令行链接mysql再打开sqlyog
一、基本介绍
二、CRUD([create][read][update][delete],增删改查)语句
1、insert语句
(添加数据)
insert into table_name(第一项,第二项,..)
values(数据1,数据2,...);
#insert注意事项#1、插入的数据应与字段的数据类型相同,如:'abc'添加到'int'型中会出错#2、数据的长度应在列的规定范围内,如:不能将一个长度为80的字符串加入到长度为40的列中#3、在values中列出的数据位置必须与被加入的列的排列位置相对应#4、字符和日期型数据应该包含在单引号''中#5、列可以插入空值【前提是该字段允许为空】。insert into table value(null)#6、insert into table_name(第一项,第二项,..) values(),(),()形式添加多条记录
INSERT INTO `goods` VALUE(4,'三星手机',4000,'beijing'),(5,'小米手机',6000,'wuhan');
SELECT * FROM goods;#7、如果是给表中所有的字段添加数据,可以不写前面的字段名称#8、默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
-- 如果牧歌列没有指定not null ,那么当添加数据是,没有给定制,则会默认给null
-- 如果我们希望指定某个列的默认值,可以在创建表时指定,如:prices double not null default 100
INSERT INTO `goods`(id,goods_name)
VALUES(6,'格力手机');
2、update语句
#演示update语句
UPDATE employee SET salary =500;#如果没有where语句,会修改所有的salary
UPDATE employee
SET Salary =2000
WHERE `user_name`='小妖怪';
SELECT * FROM employee;
DESC employee;
INSERT INTO employee VALUES(200,'老妖怪','2001-12-24','2013-11-10 15:23:23','看门的','3400','我把太阳当晚餐','king');#在原来薪水的基础上+1000
UPDATE employee
SET Salary = salary + 1000
WHERE `user_name`='老妖怪';#update使用细节#1、update语法可以用新值更新原有表行中的各列#2、set子句知识要修改哪些列和要给予哪些值#3、whiere子句指定应更新那些行,如没有,where,则更新所有行#4、如果需要修改多个字段,则以通过set 字段1=值1,字段2=值2,...
UPDATE employee
SET salary=600,job='做饭的'
WHERE `user_name`='老妖怪';
3、delete语句
delete from table_name
where ();
#演示delete语句,只能删除一行,不能删除一列(可使用update设为null或者'')#delete只删除记录,不删除表本身,删表用drop table
DELETE FROM employee
WHERE `user_name`='老妖怪';
UPDATE employee
SET `image`='';
SELECT * FROM employee;
4、select语句(查询语句)
分成单表和多表
#演示select语句#****创建新的友(studcnt)*****
CREATE TABLE stu(`id` INT NOT NULL DEFAULT 1,
`name` VARCHAR(20) NOT NULL DEFAULT '',
`chinese` FLOAT NOT NULL DEFAULT 0.0,
`English` FLOAT NOT NULL DEFAULT 0.0,
`math` FLOAT NOT NULL DEFAULT 0.0);
INSERT INTO stu(id,NAME,chinese,english,math) VALUES(1,'韩顺平',89,78,90);
INSERT INTO stu(id,NAME,chinese,english,math) VALUES(2,'张飞',45,76,67);
INSERT INTO stu(id,NAME,chinese,english,math) VALUES(3,'关羽',98,95,90);
INSERT INTO stu(id,NAME,chinese,english,math) VALUES(4,'松江',79,78,90);
INSERT INTO stu(id,NAME,chinese,english,math) VALUES(5,'李逵',89,70,90);
INSERT INTO stu(id,NAME,chinese,english,math) VALUES(6,'张顺',80,78,90);
INSERT INTO stu(id,NAME,chinese,english,math) VALUES(7,'母夜叉',89,75,90);
INSERT INTO stu(id,NAME,chinese,english,math) VALUES(8,'诸葛亮',87,78,90);
INSERT INTO stu(id,NAME,chinese,english,math) VALUES(9,'曹操',89,78,99);
-- 查询表中所有学生的信息
SELECT * FROM stu;
-- 查询表中给所有学生的姓名和对应的英语成绩
SELECT `name`,`english` FROM stu;
-- 过滤表中重复数据 distinct
SELECT DISTINCT `english` FROM stu;
-- 要查询的记录,每个字段都相同,才会去重
SELECT DISTINCT `name`,`english` FROM stu;
#select语句可以使用表达式对查询的列进行运算#在select中可以使用as语句修改列名
SELECT `name`,(`chinese`+`english`+`math`) FROM stu;
SELECT `name`,(`chinese`+`english`+`math`+100) FROM stu;
SELECT `name`,(`chinese`+`english`+`math`+100) AS total_score FROM stu;
SELECT `name` AS `stu_name` FROM stu;
#查询姓名为张飞的同学的成绩
SELECT * FROM `stu`
WHERE `name`='张飞';#查询英语成绩大于90的同学
SELECT * FROM `stu`
WHERE `english`>90;#查询总分大于200的同学
SELECT * FROM `stu`
WHERE (`chinese`+`english`+`math`)>200;#查询math>60且id>4的同学
SELECT * FROM stu
WHERE `math`>60 AND `id`>4;#查询英语》语文
SELECT * FROM stu
WHERE `english`>`chinese`;#查询总分>200,且math<chinese,且姓李的
-- 李% 表示以李开头的姓名
SELECT * FROM stu
WHERE (`chinese`+`english`+`math`)>200 AND `math`<`chinese` AND `name` LIKE '张%';#查询数学在80-90的人
SELECT * FROM stu
WHERE math BETWEEN 80 AND 90;#查询数学在89 90 91中的人
SELECT * FROM stu
WHERE math IN (89,90,91);
#演示order by的使用
-- 对数学成绩排序后升序输出
SELECT * FROM stu
ORDER BY math;
-- 对总分降序输出
SELECT `name`,(`chinese`+`english`+`math`) AS total_score FROM stu
ORDER BY total_score DESC;
-- 对姓李的成绩升序输出
INSERT INTO stu VALUES(12,'李飞',45,79,80);
SELECT * FROM stu
WHERE `name` LIKE '李%'
ORDER BY math;
5、统计、合计函数(count、sum、avg、max\min)
#演示mysql 统计函数
-- (1)count的使用
-- 统计一个班级多少学生
SELECT COUNT(*) FROM stu;
-- 统计数学设估计大于90的学生有多少个
SELECT COUNT(*) FROM stu
WHERE `math`>=90;
-- 统计总分大于250的有多少人
SELECT COUNT(*) FROM stu
WHERE (`chinese`+`english`+`math`)>250;
-- count(*)和count(列)的区别
-- count(*):返回满足条件的记录的行数
-- count(列) : 返回满足条件的某列有多少个,但是会排除null
CREATE TABLE t15(`name` VARCHAR(32));
INSERT INTO t15 VALUES('tom');
INSERT INTO t15 VALUES('jack');
INSERT INTO t15 VALUES('tomy');
INSERT INTO t15 VALUES(NULL);
SELECT COUNT(*) FROM t15;
SELECT COUNT(`name`) FROM t15;
-- (2) sum的使用:只对数字起作用
-- 统计一个班级数学总成绩
SELECT SUM(math) FROM stu;
-- 统计各科总成绩
SELECT SUM(math) AS total_math,SUM(english) AS total_en,SUM(chinese) AS total_ch FROM stu;
-- 统计语文平均分
SELECT SUM(chinese)/COUNT(*) FROM stu;#演示avg
-- 求数学平均分
SELECT AVG(math) FROM stu;#演示max/min
SELECT MAX(`chinese`+`math`+`english`),MIN(`chinese`+`math`+`english`) FROM stu;
6、分组函数
```bash
#演示mysql分组函数的使用group_by + having
CREATE TABLE dept(
deptno MEDIUMINT NOT NULL DEFAULT 0,
dname VARCHAR(20) NOT NULL DEFAULT '',
loc VARCHAR(13) NOT NULL DEFAULT '');
INSERT INTO dept VALUES(10,'ACCOUNTING','NEW YORK'),
(20,'RESEARCH','DALLAS'),
(30,'SALES','CHICAGO'),
(40,'OPERATIONS','BOSHTON');
SELECT * FROM dept;
CREATE TABLE emp(
empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*编号*/
ename VARCHAR(20) NOT NULL DEFAULT '', /*名字*/
job VARCHAR(9) NOT NULL DEFAULT '', /*工作*/
mgr MEDIUMINT UNSIGNED, /*上级编号*/
hiredate DATE NOT NULL, /*入职时间*/
sal DECIMAL(7,2) NOT NULL, /*薪水*/
comm DECIMAL(7,2), /*红利*/
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/
);
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1990-12-17',800.00,NULL,20),
(7499,'ALLEN','SALESMAN',7698,'1991-2-20',1600.00,300.00,30),
(7521,'WARD','SALESMAN',7968,'1991-2-22',1250.00,500.00,30),
(7566,'JONES','MANAGER',7839,'1991-4-2',2975.00,NULL,20),
(7654,'MARTIN','SALESMAN',7968,'1991-9-28',1250.00,1400.00,30),
(7698,'BLAKE','MANAGER',7839,'1991-5-1',2850.00,NULL,30),
(7782,'CLARK','MANAGER',7839,'1991-6-9',2450.00,NULL,10),
(7788,'SCOTT','ANALYST',7566,'1991-4-19',3000.00,NULL,20),
(7839,'KING','PRESIDENT',NULL,'1991-11-17',5000.00,NULL,10),
(7844,'TURNER','SALESMAN',7698,'1991-9-8',1500.00,NULL,30),
(7900,'JAMES','CLERK',7698,'1991-12-3',950.00,NULL,30),
(7902,'FORD','ANALYST',7566,'1991-12-3',3000.00,NULL,20),
(7934,'MILLER','CLERK',7782,'1991-1-23',1300.00,NULL,10);
SELECT * FROM emp;
-- 工资级别表
CREATE TABLE salgrade(
grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*工资级别*/
losal DECIMAL(17,2) NOT NULL, /*该级别的最低工资*/
hisal DECIMAL(17,2) NOT NULL /*该级别的最高工资*/
);
INSERT INTO salgrade VALUES(1,700,1200),
(2,1201,1400),
(3,1401,2000),
(4,2001,3000),
(5,3001,9999);
SELECT * FROM salgrade;
-- having子句用于限制分组显示结果
-- 如何显示每个部门的平均工资和最高工资
SELECT AVG(sal),MAX(sal),deptno FROM emp GROUP BY deptno;
-- 显示每个部门每种岗位的平均工资和最低工资
SELECT AVG(sal),MIN(sal),deptno,job FROM emp GROUP BY deptno , job;
-- 显示平均工资低于2000的部门号和它的平均工资
-- select avg(sal),deptno from emp
-- where avg(sal)<2000
-- group by deptno; //这种写法不对
SELECT AVG(sal),deptno FROM emp
GROUP BY deptno
HAVING AVG(sal)<2000;
-- 使用别名避免计算两次avg
SELECT AVG(sal) AS avg_sal,deptno FROM emp
GROUP BY deptno
HAVING avg_sal<2000;
版权归原作者 King without kingdom 所有, 如有侵权,请联系我们删除。