MySQL基本查询 表的增删改查CRUD :Create(创建), Retrieve(读取)Update(更新)Delete删除一般都是这几个,前面学习中也用到了现在我们来详细看看create数据库的创建和表的创建都要使用这个关键字案例创建数据库create database ‘库名’;创建表create table ‘表名’( …);insert 插入数据比如先创建学生表CREATE TABLE students (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,sn INT NOT NULL UNIQUE COMMENT ‘学号’,name VARCHAR(20) NOT NULL,qq VARCHAR(20));建表时SQl中的关键字大小写都行单行数据全列插入注意下面写的所有SQL语句中带’[ ]在写时可以省略insert [into] student(表名) [(id,sn,name,qq)] values (100, 10000, ‘唐三藏’, NULL);多行数据全列插入insert [into] student(表名) [(id,sn,name,qq)] values (101, 10001, ‘曹操’, NULL)(‘102’,20000,‘孙悟空’,NULL),(),()…只需要加个逗号然后再写数据但是不是如果不是全列插入而是指定列插入的话就要注意插入的数据对上相应的字段指定列的意思是[(id,sn,name,qq)]可以是(sn,name,qq)或者你想插入哪个都行所以要注意插入的数据对应相应的字段replace 替换就是在插入数据的时候把insert变为replace就行后面跟insert插入数据一样的写法,但是在插入的数据中如果是主键或唯一键的数据与原表的数据有冲突那就会删掉有冲突的数据再插入进去比如(接着插入上面的学生表)replace [into] student values (101,‘10003’‘猪八戒’,NULL);,插入的话因为id是主键想插入的数据中id101与原表的曹操的id冲突那就会先删除曹操的那一列数据再插入这个数据·Retrieveselect语句比如我们先创建表插入数据再做查询CREATE TABLE exam_result (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) NOT NULL COMMENT ‘同学姓名’,chinese float DEFAULT 0.0 COMMENT ‘语文成绩’,math float DEFAULT 0.0 COMMENT ‘数学成绩’,english float DEFAULT 0.0 COMMENT ‘英语成绩’);INSERT INTO exam_result (name, chinese, math, english) VALUES(‘唐三藏’, 67, 98, 56),(‘孙悟空’, 87, 78, 77),(‘猪悟能’, 88, 98, 90),(‘曹孟德’, 82, 84, 67),(‘刘玄德’, 55, 85, 45),(‘孙权’, 70, 73, 78),(‘宋公明’, 75, 65, 30);全列查询–通常情况下不建议使用 * 进行全列查询 – 1. 查询的列越多意味着需要传输的数据量越大 – 2. 可能会影响到索引的使用select * from exam_result; *加了这个就是查询表全列的数据指定列查询比如这张表你只想看id和姓名的话:select id,name from exam_result;查询为表达式就是你可以查询的数据可以加减乘除比如: select id,name,english10 from exam_result;它不会改变你原表中的数据只是在你写了当前语句后向你展示比如查询结果为你再查询原表时还是原来数据因为你只是表达式而不是等式为查询的结果起别名select id[as] ‘别名名称’from exam_result为查询的结果去重selectdistinctmath from exam_result; 如果有相同的数学成绩它只会保留一个where条件语句它的作用跟编程语言的if的效果差不多在查询数据加where之后就会是以后面的条件筛选数据展示出来常用的运算符举个样例select * from exam_resultwhere math80; 这样就会显示数学成绩大于80的数据后面的运算符用法差不多自己可以试试结果排序用法为order by ‘列名’ (降序(desc),升序(asc));,结果会按照你指定的列名的大小来排序如果会升序就是从小到大排降序就是从大到小默认为升序所以如果须要升序排序的话可以省略asc比如查询数学成绩并按数学成绩排降序 select math from exam_resultorder by math desc筛选分页结果关键字为limit,limit 0,1 这个的意思为从第一列开始查询一列前面那个数字表示从第几列开始可以说是按下标来计算的后面的那个数字表示你要查询几条数据如果你默认从第一列开始可以省略那个0limit 1update语法UPDATE table_name SET column expr [, column expr …][WHERE …] [ORDER BY …] [LIMIT …]用法说明就是你可以更新某一列值比如把孙悟空的数学成绩改为80updateexam_resultsetmath 80 where name‘孙悟空’delete删除表 delete from ‘表名’ 删除孙悟空的考试成绩:deletefrom exam__result where name‘孙悟空’聚合函数就是在做查询时我们可以使用这些函数方便我们查询时方便统计比如查询数学成绩的总分 select math,sum(math)from exam_result ;group by的使用在select中使用group by 子句可以对指定列进行分组查询案例准备工作创建一个雇员信息表来自oracle 9i的经典测试表EMP员工表DEPT部门表SALGRADE工资等级表先展示最重要的员工表empgroup by的用法就是你要以哪个列名进行对这个表进行分组相当于把一个表分为多个表比如我执行 select deptno fromgroup by deptno,它就能把deptno中的数据相同的分为一组也可以说是以deptno为准分为了多个子表,并且这些子表也能再分子表的子表也可以搭配聚合函数一起使用相当于先分组在进行聚合统计 比如 查询每个部门的平均工资 select deptno,avg(sal)from group by deptnohaving和where的使用区别having跟where应用是条件语句可以当作筛选条件但是它们的执行顺序不同这里先我们可以先总结表不是存在磁盘上的表才是表我们做的所有SQL语句得到的查询结果均是表一般having会与group by 一起使用比如查询平均工资低于2000的部门和它的平均工资 select deptno avg(sal) as myavg from emp group by deptno having ,myavg2000; 这个having的执行顺序是等表做完一系列SQl语句时才执行它也就是说等把每个部门的平均工资作为表之后再以having的条件筛选出最后的结果表而where是在表生成之前就要执行的条件筛选所以要看情况使用having和where或结合在一起使用下面是创建雇员信息表的代码你可以复制过去创建之后你可以敲一敲这些语句自己感受一下CREATE database IF NOT EXISTSscottDEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;USEscott;DROP TABLE IF EXISTSdept;CREATE TABLEdept(deptnoint(2) unsigned zerofill NOT NULL COMMENT ‘部门编号’,dnamevarchar(14) DEFAULT NULL COMMENT ‘部门名称’,locvarchar(13) DEFAULT NULL COMMENT ‘部门所在地点’);DROP TABLE IF EXISTSemp;CREATE TABLEemp(empnoint(6) unsigned zerofill NOT NULL COMMENT ‘雇员编号’,enamevarchar(10) DEFAULT NULL COMMENT ‘雇员姓名’,jobvarchar(9) DEFAULT NULL COMMENT ‘雇员职位’,mgrint(4) unsigned zerofill DEFAULT NULL COMMENT ‘雇员领导编号’,hiredatedatetime DEFAULT NULL COMMENT ‘雇佣时间’,saldecimal(7,2) DEFAULT NULL COMMENT ‘工资月薪’,commdecimal(7,2) DEFAULT NULL COMMENT ‘奖金’,deptnoint(2) unsigned zerofill DEFAULT NULL COMMENT ‘部门编号’);DROP TABLE IF EXISTSsalgrade;CREATE TABLEsalgrade(gradeint(11) DEFAULT NULL COMMENT ‘等级’,losalint(11) DEFAULT NULL COMMENT ‘此等级最低工资’,hisalint(11) DEFAULT NULL COMMENT ‘此等级最高工资’);insert into dept (deptno, dname, loc)values (10, ‘ACCOUNTING’, ‘NEW YORK’);insert into dept (deptno, dname, loc)values (20, ‘RESEARCH’, ‘DALLAS’);insert into dept (deptno, dname, loc)values (30, ‘SALES’, ‘CHICAGO’);insert into dept (deptno, dname, loc)values (40, ‘OPERATIONS’, ‘BOSTON’);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7369, ‘SMITH’, ‘CLERK’, 7902, ‘1980-12-17’, 800, null, 20);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7499, ‘ALLEN’, ‘SALESMAN’, 7698, ‘1981-02-20’, 1600, 300, 30);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7521, ‘WARD’, ‘SALESMAN’, 7698, ‘1981-02-22’, 1250, 500, 30);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7566, ‘JONES’, ‘MANAGER’, 7839, ‘1981-04-02’, 2975, null, 20);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7654, ‘MARTIN’, ‘SALESMAN’, 7698, ‘1981-09-28’, 1250, 1400, 30);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7698, ‘BLAKE’, ‘MANAGER’, 7839, ‘1981-05-01’, 2850, null, 30);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7782, ‘CLARK’, ‘MANAGER’, 7839, ‘1981-06-09’, 2450, null, 10);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7788, ‘SCOTT’, ‘ANALYST’, 7566, ‘1987-04-19’, 3000, null, 20);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7839, ‘KING’, ‘PRESIDENT’, null, ‘1981-11-17’, 5000, null, 10);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7844, ‘TURNER’, ‘SALESMAN’, 7698,‘1981-09-08’, 1500, 0, 30);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7876, ‘ADAMS’, ‘CLERK’, 7788, ‘1987-05-23’, 1100, null, 20);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7900, ‘JAMES’, ‘CLERK’, 7698, ‘1981-12-03’, 950, null, 30);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7902, ‘FORD’, ‘ANALYST’, 7566, ‘1981-12-03’, 3000, null, 20);insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)values (7934, ‘MILLER’, ‘CLERK’, 7782, ‘1982-01-23’, 1300, null, 10);insert into salgrade (grade, losal, hisal) values (1, 700, 1200);insert into salgrade (grade, losal, hisal) values (2, 1201, 1400);insert into salgrade (grade, losal, hisal) values (3, 1401, 2000);insert into salgrade (grade, losal, hisal) values (4, 2001, 3000);insert into salgrade (grade, losal, hisal) values (5, 3001, 9999);