目录
- -- 在员工表emp上新增一个image列 ,VARCHAR类型 要求在resume后面
- ALTER TABLE emp
- ADD (`image` VARCHAR(20)) AFTER resume
- -- 显示表结构
- DESC `emp`
- -- 修改job列 ,使其长度为60 不允许为空
- ALTER TABLE `emp`
- MODIFY job VARCHAR(60) NOT NULL DEFAULT ' '
- -- 删除 image 列
- ALTER TABLE `emp`
- DROP image
- -- 修改表的字符集为utf8
- ALTER TABLE emp CHARACTER SET utf8
- -- 修改表名为employee
- RENAME TABLE emp TO employee
- -- 列名name 改为user_name
- ALTER TABLE employee
- CHANGE `name` user_name VARCHAR(20) NOT NULL DEFAULT ' '
CREATE TABLE 表1 LIKE 表2
把表1的结构复制给新创建的表2
使用方法
insert into 表名(列名,列名,列名)values(数值1,数值2,数值3)
- INSERT INTO employee ( `id`,`user_name`,`sex`,`brithday`,`entry_date`,`job`,
- `salary`,`resume`)
- VALUES (0002,'关羽','男','2001-2-5','2005-05-05 22:40:21','分首大师',15000,'关二弟')
细节1,如果‘123’
加入到int类型却不会报错,因为mysql底层会产生把'xxxx'转成int类型,可以转的不报错
- -- 将关羽的工资改为20000
- UPDATE employee
- SET salary =20000 WHERE user_name = '关羽'
- -- 将刘备的工资在原理基础上加5000
- UPDATE employee SET salary = salary+5000 WHERE user_name = '刘备'
- -- 删除张飞和赵云的信息
- DELETE FROM employee where user_name in ('张飞','赵云')
- -- 删除关羽的信息
- DELETE FROM employee WHERE user_name = '关羽'
distinct 删除重复行
- -- 查询所有信息
- SELECT * FROM employee
- -- 查询所有员工名字和性别
- SELECT user_name,sex FROM employee
- -- 条件查询,查询编号为3的员工的名字,性别,工资
- SELECT user_name,sex,salary FROM employee WHERE id = 3
- -- 统计stu表中每个同学的总分
- SELECT `name` 名字,(Chinese+Math+English) 总分 FROM stu
- -- 查询总分大于200且数学成绩不及格的学生名字
- SELECT `name` FROM stu WHERE (Chinese+Math+English)>200 AND Math<60
- -- 查询满足总分大于200 或 英语不及格
- SELECT * FROM stu WHERE (Chinese+Math+English)>200 OR English<60
- -- 查询名字里带红的同学
- SELECT * FROM stu WHERE `name` LIKE '%红%'
- -- 查询数学成绩在60到80的同学
- SELECT *FROM stu WHERE Math BETWEEN 60 and 80
- -- 查询所有学生,按语文成绩降序排列
- SELECT * FROM stu ORDER BY Chinese DESC
- -- 总分降序排列
- SELECT `name` ,(Chinese+Math+English) total FROM stu ORDER BY total DESC
- -- count()函数
- -- 统计一共有多少学生
- SELECT COUNT(*) FROM stu;
- -- 统计数学成绩及格的学生个数
- SELECT COUNT(*) FROM stu WHERE Math >=60;
- -- 统计总分大于250的学生个数
- SELECT COUNT(*) FROM stu WHERE (Chinese+Math+English)>250
- -- COUNT(*) 和 COUNT(列)的区别
- -- COUNT(*) 返回满足条件的条数 COUNT(列)满足条件的某列都多少,但是会排除null
-
- -- SUM()函数
- -- 统计这个班数学总成绩
- SELECT SUM(Math) 数学总成绩 FROM stu
- -- 统计这个班 三科分别的总成绩
- SELECT SUM(Math) 数学,SUM(English) 英语,SUM(Chinese) 语文 FROM stu
- -- 统计这个班三科成绩总和
- SELECT (SUM(Math)+SUM(English)+SUM(Chinese)) 总和 FROM stu
-
- -- AVG()函数
- -- 统计语文平均分
- SELECT AVG(Chinese) FROM stu
- -- 班级总分平均分
- SELECT AVG(Chinese+Math+English) 总分平均分 FROM stu
- -- 统计每个人的平均分 没用到AVG
- SELECT `name` , (Chinese+Math+English)/3 FROM stu
-
- -- MIN() MAX()
- -- 统计数学最高分
- SELECT MAX(Math) FROM stu
- -- 统计总分最低分
- SELECT MIN((Chinese+English+Math)) 总分 FROM stu
-
-
-
用到的数据库
- CREATE TABLE dept( /*部门表*/
- deptno MEDIUMINT UNSIGNED 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', 'BOSTON');
-
-
-
-
- #创建表EMP雇员
- 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', 7698, '1991-2-22', 1250.00, 500.00, 30),
- (7566, 'JONES', 'MANAGER', 7839, '1991-4-2', 2975.00,NULL,20),
- (7654, 'MARTIN', 'SALESMAN', 7698, '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, '1997-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,'1992-1-23', 1300.00, NULL,10);
-
-
-
- #工资级别表
- 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);
- INSERT INTO salgrade VALUES (2,1201,1400);
- INSERT INTO salgrade VALUES (3,1401,2000);
- INSERT INTO salgrade VALUES (4,2001,3000);
- INSERT INTO salgrade VALUES (5,3001,9999);
- -- 查询每个部门的最高工资 和平均工资
- SELECT MAX(sal) 最高工资, AVG(sal) 平均工资 FROM emp GROUP BY deptno
- -- 查询每个部门的,每个岗位的平均工资和最低工资
- SELECT AVG(sal) 平均工资,MIN(sal) 最低工资 , deptno 部门, job 岗位 FROM emp GROUP BY deptno,job
- -- 显示平均工资低于2000的部门号和他的平均工资
- SELECT deptno 部门号 , AVG(sal) 平均工资 FROM emp GROUP BY deptno HAVING AVG(sal)<2000
- -- CHARSET(STR) 返回字符串字符集
- SELECT CHARSET(ename) FROM emp;
- -- CONCAT(str1,str2,...) 连接字符串
- SELECT CONCAT(ename,'工作是',job) FROM emp
- -- INSTR(str,substr) 返回substr在string中出现的位置,没有返回0
- -- UCASE(str) 转成大写 LCASE(str)小写
- SELECT UCASE(`ename`) FROM emp
- SELECT LCASE(`ename`) FROM emp
- -- LEFT(str,length)从str中的左边取length个字符
- SELECT LEFT(ename,3) FROM emp
- -- RIGHT(str,length)从str中的左边取length个字符
- SELECT RIGHT(ename,3) FROM emp
- -- LENGTH(str) str 的长度
- SELECT LENGTH(ename) from emp
- -- REPLACE 替换
- SELECT REPLACE(ename,'SMITH','史密斯')FROM emp
- -- STRCMP(expr1,expr2)逐字符比较两字符串大小
- -- SUBSTRING(列名,开始位置,结束位置)从列名,开始位置取字符到结束位置
- SELECT SUBSTRING(ename,1,2) FROM emp
- -- LTRIM(str)去除前端空格 RTRIM(str)去除后端空格 TRIM(str)去除两段空格
- SELECT LTRIM(' 指的是大') FROM DUAL
- SELECT RTRIM('dasdsad ') FROM DUAL
- SELECT TRIM(' sdda ') FROM DUAL
-
-
-
- -- ABS(X)绝对值
- SELECT ABS(-10) FROM DUAL;
-
- -- BIN(N)十进制转二进制
- SELECT BIN(30) FROM DUAL;
-
- -- CEILING(X)向上取整,得到比x大的最小整数
- SELECT CEILING(30.41) FROM DUAL;
- -- FLOOR(X)向下
- SELECT FLOOR(-11.6) FROM DUAL;
-
- -- CONV(N,from_base,to_base) 进制转换
- SELECT CONV(98,10,16) FROM DUAL
- -- FORMAT(X,D)保留D位小数位数 四舍五入
- SELECT FORMAT(11.146344,2) FROM DUAL
- -- HEX(N_or_S)转成16进制
-
- -- LEAST(value1,value2,...)求最小值
- SELECT LEAST( 1,2,4) FROM DUAL
- -- MOD(N,M) 求N/M余数
- SELECT MOD(6,4) FROM DUAL
- -- RAND() 返回随机数 范围为0到1 内部加数字生成的随机数就不变了
- SELECT RAND() FROM DUAL
- SELECT RAND(1) FROM DUAL
- -- 创建测试表
- CREATE TABLE mes(
- id INT,
- content VARCHAR(30),
- send_time DATETIME)
- INSERT INTO mes VALUES(1,'北京新闻',CURRENT_TIMESTAMP())
- INSERT INTO mes VALUES(1,'上海新闻',NOW())
-
- -- CURRENT_DATE()当前日期
- SELECT CURRENT_DATE() FROM DUAL
- -- CURRENT_TIME()当前时间
- SELECT CURRENT_TIME() FROM DUAL
-
- -- CURRENT_TIMESTAMP 当前时间戳
- SELECT CURRENT_TIMESTAMP() FROM DUAL
-
- -- 显示所有新闻信息,只显示日期不显示时间
- SELECT id,content,DATE(send_time) FROM mes
- -- 查询10分钟内的新闻
- SELECT*FROM mes WHERE DATE_ADD(send_time,INTERVAL 10 MINUTE) > NOW()
- -- 求出2011-11-11和1990—1-1相差多少天
- SELECT DATEDIFF('2001-11-11','1990-1-1') FROM DUAL
- -- 求出2001-1-1日到现在过来多少天
- SELECT DATEDIFF(NOW(),'2001-1-1') FROM DUAL
- -- 如果你能活到80岁你还能活几天,假如你2001-1-1日出生
- -- 1.先求出80岁时是什么时候
- SELECT DATEDIFF(DATE_ADD('2001-1-1',INTERVAL 80 YEAR),NOW())
- -- 求时间间隔
- SELECT TIMEDIFF('2001-1-2 10:21:21','2001-1-1 10:21:21') FROM DUAL
- -- 显示日期的年或月或日
- SELECT YEAR('2001-4-5')FROM DUAL
- SELECT month('2001-4-5')FROM DUAL
- SELECT DAY('2001-4-5')FROM DUAL
- -- UNIX_TIMESTAMP():返回1970年到现在的毫秒数
- SELECT UNIX_TIMESTAMP() FROM DUAL
-
-
-
-
- -- USER() 查询当前用户 可以查看登录到mysql有那些用户,以及登录的ip
- -- DATABASE()数据库名称
-
- -- PASSWORD() 加密函数 数据库的密码就是这样加密的
- SELECT PASSWORD('qwer') FROM DUAL
- -- MD5(str) 为字符串生成一个md5的字符串 32位,常用于为密码加密
- SELECT MD5('123123') FROM DUAL
- -- 例子
- CREATE TABLE `user`(
- `id` int,
- `name` VARCHAR(10),
- `pwd` char(32))
- INSERT INTO `user`
- VALUES(1,'zhang',MD5(1234556))
- -- 查询这个用户
- SELECT * FROM `user` WHERE `name`='zhang'AND `pwd`= MD5(1234556)
-
- -- 数据库的用户信息
- SELECT * FROM mysql.user
- -- 查询emp表,如果comm为null,则显示0.0
- SELECT ename,IF(comm IS NULL,0.0,comm) FROM emp
- SELECT ename ,IFNULL(comm,0.0) FROM emp
- -- 如果 emp表的job是CLERK 则显示职员 如果是MANAGER则显示经理如果是SALESMAN 则显示
- -- 销售 如果是其他正常显示
- SELECT ename ,(SELECT CASE
- WHEN job = 'CLERK' THEN '职员'
- WHEN job = 'MANAGER' THEN '经理'
- WHEN job = 'SALESMAN' THEN '销售'
- ELSE job END) AS job FROM emp
- -- 分页查询, 查询3条数据显示在第一页
- SELECT * FROM emp ORDER BY empno LIMIT 0,3
- -- 按雇员的id号降序取出,每页显示2条记录,分别显示第三页和第五页的数据
- SELECT * FROM emp ORDER BY empno LIMIT 4,2;
- SELECT * FROM emp ORDER BY empno LIMIT 8,2
- -- 使用分组函数和分组子句group by
- -- (1)显示每种岗位的雇员总数、平均工资。
- SELECT COUNT(*) 雇员总数,AVG(sal) FROM emp
- GROUP BY job
- -- (2)显示雇员总数,以及获得补助的雇员数(comm 非空)。
- SELECT COUNT(*) 雇员总数 ,COUNT(comm) 获得补助 FROM emp
- -- 统计没有获得补助的雇员数
- SELECT COUNT(*) , COUNT(IF(comm is NULL,1,null)) FROM emp
- -- (3)显示管理者的总人数。DISTINCT 去除重复
- SELECT COUNT(DISTINCT mgr) FROM emp
- -- (4)显示雇员工资的最大差额。
- SELECT MAX(sal) - MIN(sal) 最大差额 FROM emp
- -- 统计每个部门的平均工资,并且是大于1000的,
- -- 按照平均工资从高到低排序,取出前两行记录
- SELECT AVG(sal) FROM emp
- GROUP BY deptno HAVING AVG(sal)>1000
- ORDER BY AVG(sal) DESC
- LIMIT 0,2