Mysql数据库初笔记_第1页
Mysql数据库初笔记_第2页
Mysql数据库初笔记_第3页
Mysql数据库初笔记_第4页
免费预览已结束,剩余44页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录TOC\o"1-5"\h\z\o"CurrentDocument"ー、简单査询语句 4\o"CurrentDocument"1、基础査询语句select 4\o"CurrentDocument"取别名 4distinct的使用,去重 4\o"CurrentDocument"査看表格结构 4\o"CurrentDocument"2、条件査询 5like模糊査询 5in: 5notin 5betweenand: 介于xx之间 5isnull/is notnull: 6\o"CurrentDocument"作业 6\o"CurrentDocument"3、排序査询 8\o"CurrentDocument"练习 8作业 9\o"CurrentDocument"4、常用函数 10\o"CurrentDocument"#字符串函数 10\o"CurrentDocument"#数学函数 12\o"CurrentDocument"#日期函数 13\o"CurrentDocument"#流程控制函数 14\o"CurrentDocument"5、分组函数 15二、査询 19\o"CurrentDocument"1、连接査询 19\o"CurrentDocument"# 等值连接 20\o"CurrentDocument"#非等值连接 21\o"CurrentDocument"#自连接 21非等值连接 25自连接 25\o"CurrentDocument"外连接 26\o"CurrentDocument"交叉连接:笛卡尔集的效果(cross) 27\o"CurrentDocument"2、子査询 27ー、where或having 28二、列子査询(多行) 31\o"CurrentDocument"三、FROM后面,子査询结果充当从ー张表,必须取别名 33四、exists后面(相关子査询):判断后面査询字句有没有结果,布尔类型33\o"CurrentDocument"3、分页査询 34\o"CurrentDocument"4、联合査询 35\o"CurrentDocument"三、增删改査:数据操作语言DML 36\o"CurrentDocument"ー、插入 36\o"CurrentDocument"二、修改语句 37.修改单表记录 37\o"CurrentDocument".修改多表记录(补充) 37\o"CurrentDocument"三、删除语句 38方法一:DELETE 38方法二:TRUNCATE,删除整个表内容,不可以加where条件 40\o"CurrentDocument"四、数据定义语言DDL 41\o"CurrentDocument"ー、库的管理 41\o"CurrentDocument"1、创建库 41\o"CurrentDocument"更改数据库字符集 41\o"CurrentDocument"库的删除 42\o"CurrentDocument"二、表的管理 42\o"CurrentDocument"表的修改alter 43修改列名CHANGE 43\o"CurrentDocument"修改列的类型或约束MODIFY 43添加列ADD 43删除列drop 43修改表名renameto 43\o"CurrentDocument"表的复制 44\o"CurrentDocument"仅仅复制表的结构 44\o"CurrentDocument"复制表的结果外加数据 44\o"CurrentDocument"只复制部分数据或部分列 45\o"CurrentDocument"仅仅复制某些字段(某部分结构) 45\o"CurrentDocument"五、约束与自增 46\o"CurrentDocument"ー、约束 46\o"CurrentDocument"添加外键 47\o"CurrentDocument"表级添加主键 47\o"CurrentDocument"列级添加主键 47\o"CurrentDocument"删除主键 47\o"CurrentDocument"删除唯一建 48\o"CurrentDocument"二、自增 48\o"CurrentDocument"ー、创建表示设置标识列 48\o"CurrentDocument"二、修改表示创建表示列 48\o"CurrentDocument"删除自增 49ー、简单查询语句1V基础查询语句selectselect字段,字段,..from表名;(若是关键字需要加着重号、,)(查询函数)调用函数,获取返回值selectdatabase(); 数据库名selectversion();selectuser(); 数据库用户取别名as:selectuser〇AS用户名【别名】:(用户名可加单双引号,特殊符号必须加双引号)空格:selectuser()别名;多个字段查询,别名也可以单独取,放在相应的字段后。多个字段连接并取别名+在mysql中只做加法运算,将连接字段中的值若是有字符串强行转换成数值,若是无法转换则为0;select字段1+字段二as【空格】别名from表名concat在mysql中用来连接数据库字段,但是只要其中一个字段为空则全部为空。selectconcat(字段1,字段2,。。)别名from表名;distinct的使用,去重selectdistinct字段from表名:查看表格结构desc表名:showcolumnsfrom表名;查看列(columns)ifnull(字段,一)判断字段是否为空,若是空则’’显示需要输入的值selectconcat(字段1,字段2,ifnull(字段3,'')。。)别名from表名;2、条件查询条件査询whereNOTlike模糊查询:任意单个字符,%任意多个字符,需用单引号引起来。select字段from表名where字段1like;查询带有a的姓名SELECT*FROMemployeesWHERElast_nameLIKE'%a%';第一个字符为a的姓名SELECT*FROMemployeesWHERElastnameLIKE'a%';最后一个字符为。的姓名SELECT*FROMemployeesWHERElast_nameLIKE'%a’;第三个字符为aSELECT*FROMemployeesWHERElast_nameLIKE'_a%’;查询第二个带有下划线的姓名,需要加转义字符、SELECT*FROMemployeesWHERElast_nameLIKE'_、メ';SELECT*FROMemployeesWHERElast_nameLIKEescape'$';in:查询某字段的值是否属于指定列表之内notin,与上面的相反。select字段from表名where字段in【值】/notin();查询含有30,50,90的员エ信息SELECTlastname,department_idFROMemployeesWHEREdepartment_idIN(30,50,90);查询エ种编号不是sh_clerk,it_prog的信息select*fromemployeeswherejob_idNOTIN('sh_clerk',it_prog');betweenand!介于xx之间查询department_id的介于30到90之间SELECTdepartment_id,last_nameFROMemployeesWHEREdepartment_idBETWEEN30AND90;查询姓名,エ资,年薪,且年薪不在10000到20000之间的信息SELECTlast_name,salary,commission_pct,salary*12*(1+IFNULL(commission_pct,0))‘年薪‘FROMemployeesWHEREsalary*12*(l+IFNULL(commission_pct,0))NOTBETWEEN10000AND20000;isnull/isnotnull:判断nul!值,=判断普通内容,<=>安全等于集合了is和=的功能查询有奖金的人的姓名,奖金SELECTlast_name,commission_pctFROMemployeesWHEREcommission_pctisNOTNULL;查询没有奖金的人的姓名,奖金SELECTlast_name,commission_pctFROMemployeesWHEREcommission_pctisNULL;OR◊不等于不知道优先级可以打小括号SELECTlast_name,departmentid,emailFROMemployeesWHERENOT(department_id>=50ANDdepartment_id<=100);SELECT*FROMemployeesWHEREcommission_pct>0.03OR(employee_id>=60ANDemployee_id<=110);作业查询エ资大于12000的员エ姓名和エ资^SELECTlastname,salaryFROMemployeesWHEREsalary>12000;员エ号为176的姓名和年薪和部门号#SELECTlast_name,department_id,salary*12*(1+IFNULL(commission_pct,0))年薪FROMemployeesWHEREemployee_id=176;#选择エ资不在5000到12000的员エ姓名和エ资#SELECTlast_name,salaryFROMemployeesWHEREsalaryNOTBETWEEN5000AND12000;选择在20或50号部门员エ的姓名和部门号^SELECTlastname,departmentidFROMemployeesWHEREdepartment!dIN(20,50);选择公司中没有管理者的员エ姓名及jod_idSELECTlast_name,job_idFROMemployeesWHEREmanager_idISNULL;选择公司中有奖金的员エ姓名,工资和奖金率SELECTlastname,salary,commissionpetFROMemployeesWHEREcommissionpetisnotNULL;员エ姓名第三个字母是a的员エ姓名^SELECTlastnameFROMemployeesWHERElastnameLIKE'_a%’;显示employees表中first_name以e结尾的员エ信息SELECT*FROMemployeesWHEREfirst_nameLIKE'%e’;选择姓名有a和e的员エ姓名^SELECTlast_nameFROMemployeesWHERElast_nameLIKE ;#有问题ttSELECTlast_nameFROMemployeesWHERElast_nameLIKE'%a%'ANDlast_nameLIKE'%e%';显示employees表中部门编号在80至U100之间的姓名,职位ttSELECTlast_name,job_id,department_idFROMemployeesWHEREdepartment_idBETWEEN80AND100;显示employees表中managejid是100,101,110的员エ姓名、职位ttSELECTlast_name,job_id,manager_idFROMemployeesWHEREmanager_idIN(100,101,110)3、排序查询select查询字段from表[where条件】orderby排序列表(单个字段,多个字段之间用逗号隔开,表达式,函数,列数,及以上组合;asc升序默认的,desc降序)执行顺序from》where》select》orderby练习有奖金的员工按年薪降序排名^SELECT*,salary*12*(l+IFNULL(commissionpct,0))年薪FROMemployeesWHEREcommission_pctISNOTNULLORDERBYsalary*12*(l+IFNULL(commission_pct,0))DESC;^SELECT*,salary*12*(l+IFNULL(commissionpet,0))年薪FROMemployeesWHEREcommission_pctISNOTNULLORDERBY年薪DESC;#SELECT*,salary*12*(l+commission_pct)年薪FROMemployeesWHEREcommission,pctISNOTNULLORDERBY年薪DESC;#按名字长度排序升序#SELECTLENGTH(last_name)len,last_nameFROMemployeesORDERBYlen;多个字段排序,用逗号隔开。查询公司员エ姓名,エ资,部门编号,先工资升序,再部门降序^SELECTlastname,salary,departmentidFROMemployeesORDERBYsalaryASC,department_idDESC;安列数排序,字母顺序排列的^SELECT*FROMemployeesORDERBY2;##2是指按照第二列排列,与写字段是ー样的效果。#SELECT*FROMemployeesORDERBYfirst_name;#查询员エ姓名、部门号、年薪,按年薪降序,姓名升序#SELECTlastname,department_id,salary*12*(l+IFNULL(commission_pct,0))年薪FROMemployeesORDERBY年薪desc,last_name;#选择エ资不在8000到17000的员エ姓名和エ资,按エ资降序^SELECTlastname,salaryFROMemployeesWHEREsalaryNOTBETWEEN8000AND17000ORDERBYsalaryDESC;#查询邮箱中包含e的员エ信息,先按邮箱的字节数降序,再按部门号升序#SELECT*FROMemployeesWHEREemailLIKE'%e%'ORDERBYLENGTH(email)DESC,department_id;4、常用函数#字符串函数#CONCAT(字符串,字段,...),拼接字符函数,可以写入多个字符串或是字段#SELECTCONCAT(last_name,*hellow*)fromemployees;#LENGTH(str),可写入字符串或是字段,获取字节长度#SELECTLENGTH('哈哈哈哈,嘻嘻嘻’);#CHAR_LENGTH(str)可写入字符串或是字段,获取字符长度,有几个字符^SELECTCHARLENGTHC哈哈哈哈,嘻嘻嘻’);#SUBSTRING(字符串,起始索引,截取字符长度)截取字串,起始索引是1开始:#SELECTSUBSTRING(,张三丰爱上了郭襄’,3,3);#SELECTSUBSTRING(,张三丰爱上了郭襄’,3,I);#SUBSTRING(字符串,起始索引),截取从起始索引及其之后的字符#SELECTSUBSTRING(,张三丰爱上了郭襄’,3);重载#SUBSTR(strFROMposFORlen),与截取字符串ー样^SELECTSUBSTR(,张三丰爱上了郭襄’,2,4);#LEFT\RIGHT(字符串,截取长度),从左右开始截取#SELECTLEFT('asdfg',2);^SELECTRIGHT('asdfg',2);#INSTR(字符串,需要查询的第一次出现的字符串),获取字节第一次出现的索引^SELECTINSTR(’三打白骨金aaa白骨金白骨金白骨金’,‘白骨金’);#TRIM(指定需要去除的字符from字符串),默认的是去除前后空格,指定去除字符串前后的字符#SELECTTRIMC哈哈哈嘻嘻嘻‘);#SELECTTRIMCx'FROM'xxxxxx哈哈哈xx嘻嘻嘻xxxxx');#LPAD\RPAD(字符串,填充长度,填充字符),左右填充#SELECTLPADC虚竹’,10,‘西夏公主');^SELECTRPADC虚竹',10,'西夏公主');#UPPER(str)变大写字符,LOWER(str)变小写字符#查询员エ表的姓名,姓首字母大写,其他小写;名的所以字符小写,姓和名之间用一分割,取别名U0TPUTSELECTCONCAT(UPPER(SUBSTRING(last_name,1,1)),LOWER(SUBSTRING(last_name,2)),,LOWER(first_name))OUTPUTFROMemployees;#STRCMP(字符串,字符串)比较两个字符串的大小,第一个先比较若是同再比较第二个,若是不同则结束比较SSELECTSTRCMPC郭襄’,'张三丰');>1#SELECTSTRCMPC张三丰','郭襄');<-1#SELECTSTRCMPC郭襄',’郭襄’);#数学函数#ABS(数值),绝对值SELECTABS(-0.2);#CEIL(数值),向上取整SELECTCEIL(0.2);SELECTCEIL(-0.2);#FLOOR(数值),向下取整^SELECTFLOOR(0.2);♦SELECTFLOOR(-0.2);#ROUND(数值,小数点后保留位数),四舍五入,默认保留整数♦SELECTROUND(1.25,1);SELECTROUND(1.25);TRUNCATE(数值,保留位数),截断,保留小数点后面位数♦SELECTTRUNCATE(1.252423,2);#MOD(数值,数值),% 取余数SELECTM0D(10,3);—SELECTMOD(-10,-3);~SELECTMOD(-10,3);—SELECT-10%-3;#日期函数#\0W0,获取当前时间日期ttSELECTNOW();#CURDATE()只获取当前日期#SELECTCURDATEO;#CURTIME()只获取当前时间#SELECTCURTIMEO;DATEDIFF(日期1,日期2)计算两个时间之差,天为单位^SELECTDATEDIFF2021-11-15','1996-11-15');DATE一FORMAT(时间日期,指定的格式),指定时间[!期格式#SELECTDATE_F0RMAT('2021.6.808.41.0','%Y-%m-%d指定员エ表的入职时间日期为年月日ttSELECTDATE-FORMAT(hiredate,'%丫年%m月%d日')入职日期FROMemployees;STR_TO_DATE(str,指定格式),解析字符串为合法日期#SELECTSTRTODATE('6/82021','%m/%d%Y');只可以根据字符串中的格式#流程控制函数#IF(条件,是显示的结果,否显示的结果)#若是有奖金则显示最终奖金,若是无则显示。#SELECTTRUNCATE(IF(commission_pctisNOTNULL,commissionjct*salary,0),0)最终奖FROMemployees;CASE表达式与swithー样;类似多亜if语句的,表达式直接直接写在when之后。WHEN值1THEN结果1〇〇〇〇ELSE结果END部门号30,エ资2倍部门号50,エ资3倍部门号60,エ资4倍SELECTdepartment_id,salary旧エ资,CASEdepartmentidWHEN30THENsalary*2WHEN50THENsalary*3WHEN60THENsalary*4ELSEsalaryEND新エ资FROMemployees;#类似多重if语句的,表达式直接直接写在when之后。工资>20000,显示级别A工资》15000,显示级别B工资>10000,显示级别C否则显示DSELECTsalary,CASEWHENsalary>20000THEN'A'WHENsalary>15000THEN,B'WHENsalary>10000THEN'C'ELSE,D'END级别FROMemployees;5、分组函数分组函数单行函数一对ー的感觉,分组函数,将多个值计算汇总返回为ー个值分组函数叫聚合函数或是统计函数,用于将一组数据进行统计计算。sum(字段名):求和avg(字段名):求平均值#max(字段名):求最大值#min(字段名):求最小值count(字段名):计算非空字段的个数,自动去掉空值。统计结果集的函数推荐用count.(*)并查询员エ的工资和,エ资平均值,最低工资,最高工资,有工资个数^SELECTSUM(salary)总エ资,AVG(salary)平均エ资,MIN(salary)最低エ资,MAX(salary)最高工资,COUNT(salary)有エ资fromemployees;添加帅选条件查询有佣金的记录数SSELECTCOUNT(salary)FROMemployees;查询月薪大于2500的人数ttSELECTCOUNT(salary)fromemployeesWHEREsalary>2500;并查询有领导的人数^SELECTCOUNT(managerid)FROMemployees;肥ount(*),count(I)=count(*)只要表内其中一行中一个有值,则算入统计。计算表内的函数,也可以加条件SELECTCOUNT(*)FROMemployees;^SELECTCOUNT(*)FROMemployeesWHEREdepartmentid=30;搭配dstinct实现去重统计查询有几个部门有员エ^SELECTCOUNT(DISTINCTdepartment-id)fromemployees;每个部门的总エ资、平均エ资分组查询,需要先分组,然后在使用分组函数^SELECTdepartment_id,SUM(salary),AVG(salary)FROMemployeesGROUPBYdepartment_id;查询每个领导手下的人数;一般xx数用count,不确定用什么字段就・SELECTmanagerid,COUNT(*)FROMemployeesGROUPBYmanagerid;查询邮箱中包含a字符的,每个部门的最高高能工资SELECTMAX(salary),emailFROMemployeesWHEREemailLIKE'%a%'GROUPBYdepartmentid;查询每个领导手下有奖金的员エ的平均エ资^SELECTAVG(salary*(l+commission_pct))平均エ资,manager_idFROMemployeesWHEREcommission_pctisNOTNULLGROUPBYmanager_id;查询哪个员工部门的人数大于5^SELECTCOUNT(*)员エ个数,department一idFROMemployeesGROUPBYdepartment_idHAVINGCOUNT(*)>5;每个エ种有奖金的员エ的最高工资>12000的工种编号和最髙工资SELECTjob_id,MAX(salary)FROMemployeesWHEREcommission_pctisnotnullGROUPBYjob_idHAVINGMAX(salary)>12000;领导编号大于102的 每个领导手下最低工资大于5000的最低工资SELECTmanagerid,MIN(salary)FROMemployeesWHEREmanager_id>102GROUPBYmanageridHAVINGMIN(salary)>5000;#查询没有奖金员エ的最高工资>6000的工种编号和最广告エ资,按最高工资升序^SELECTjob_id,MAX(salary)FROMemployeesWHEREcommission_pctisnullGROUPBYjob_idHAVINGMAX(salary)>6000ORDERBYMAX(salary);查询每个エ种每个部门的最低工资,并按最低工资降序^SELECTMIN(salary),job_id,department_idFROMemployeesGROUPBYjobid,departmentidORDERBYMIN(salary)desc;查询各个管理者手下员エ的最低工资,其中最低工资不能低于6000,没有管理者不计入统计SELECTMIN(salary),manager_idFROMemployeesWHEREmanager_idisnotnullGROUPBYmanager_idHAVINGMIN(salary)>=6000;查询所有部门编号,员工数量和工资平均值,并按平均エ资降序SELECTdepartmentid,COUNT(employee_id),AVG(salary)fromemployeesGROUPBYdepartment_idORDERBYAVG(salary)desc;选择具有各个job_id的员工数SELECTCOUNT(*),job_idFROMemployeesWHEREjob_idisnotnullGROUPBYjob_id二、查询1、连接查询连接查询,多表查询笛卡尔集错误表1有m行、表2有n行,结果是m*n,就是未加任何有效的连接条件造成:添加有效的连接条件可避免SELECTbeauty,name,boyNameFROMboys,beautyWHEREbeauty.boyfriend_id=boys,id;#sqll92标准#等值连接,显示两个表的交集部分,若是表取了别名,则后面条件只可以用别名。查询员エ姓名、エ种号、エ种名一SELECTlastname,employees,jobid,jobtitle-fromemployees,jobs-WHEREemployees,jobid=jobs.jobid;2,查询有奖金的员エ名,部门名SELECTlast_name,department_nameFROMemployeese,departmentsd一WHEREcommissionpctisnotnullANDe.department_id=d.department!d;3.查询城市中第二个字母为〇的部门和城市名(加筛选)-SELECTdepartmentname,cityFROMdepartmentsd,locations1一WHEREcityLIKE’0%'AND1.location_id=d.locationid;4.查询每个城市的部门个数(加分组)-SELECTCOUNT(*)个数,city,departmentname-FROMlocations1,departmentsd-WHERE1.location_id=d.location_id-GROUPBYcity;5,查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资一SELECTdepartmentname,d.manager_id,MIN(salary)-FROMdepartmentsd,employeese一WHEREcommission_pctisnotnull一andd.department_id=e.department_id--GROUPBYdepartmentname;#查询每个工种的工种名和员エ个数,并按员エ个数降序(排序)SELECTjob_title,COUNT(*)一FROMemployeese,jobsj一WHEREe.job_id=j.job_id—GROUPBYjob_title~ORDERBYCOUNT(*)desc;6.实现三表连接查询员エ名部门名和所在城市SELECTlastname,,cityfromemployeese,departmentsd,locations1一WHEREe.department_id=d.departmentidandd.locationid=l.locationid;#非等值连接1.查询员エエ资和エ资级别-SELECTsalary,grade_levelーーFROMemployees,jobgrades-WHEREsalaryBETWEENlowestsalANDhighestsal;自连接同・个表看作是两个不同的表进行连接,取不同的别名进行查询#P77作业sqll99标准【推荐】内连接,外连接[左,右,全外],交叉连接/*SELECT查彻列表FROM表1连接类型(内:inner、外左left,外右right,全外full、交叉连接:cross)JOIN表2(相当于,)ON连接条件(之前连接条件和筛选条件都是where现在区分开来)WHERE筛选条件//*内连接inner可以省略等值连接实现效果和sql92语法是ー样的SELECT查询列表FROM表1INNERJOIN表2ON连接条件【等值连接,非等值连接,自连接】#1.查询员エ名、部门名/♦SELECTlastname,department_nameFROMemployeeseINNERJOINdepartmentsdONe.departmentid=d.departmentid;*//*SELECTlast_name,department_nameFROMemployeese,departmentsdWHEREe.department_id=d.department_id;*//*查询名字中包含e的员エ名和工种名SELECTlast_name,job_titleFROMemployeeseINNERJOINjobsjONe.job_id=j.job_idWHERElast_nameLIKE'%e%';查询部门个数大于3的城市名和部门个数SELECTcity,count(*)部门数FROMlocations1INNERJOINdepartmentsdON1.location_id=d.locationidGROUPBYcityHAVINGcount(*)>3;*//*查询那个部门员工个数大于3的部门名和员エ个数,并按个数降序SELECTdepartment_name,COUNT(*)员工个数FROMdepartmentsdINNERJOINemployeeseONd.department_id=e,department_idGROUPBYdepartmentnameHAVINGCOUNT(*)>3ORDERBYCOUNT(*)desc;*//*查询员エ姓名,工种名,并按部门名降序SELECTlast_name,job_titleFROMjobsjINNERJOINemployeeseONj.job_id=e.jobidINNERJOINdepartmentsdONe.departrnent_id=d.departmentidORDERBYdepartmentnamedesc;/*非等值连接查询员エエ资级别SELECTgrade_level,salaryFROMjobgradesgJOINemployeeseONsalaryBETWEENlowest_salANDhighest_sal;查询エ资级别大于20的个数,并按エ资级别降序SELECTCOUNT(*)エ资级别个数,grade_levelFROMjob_gradesgJOINemployeeseONsalaryBETWEENlowest_salANDhighest_salGROUPBYgradelevelHAVINGCOUNT(*)>20ORDERBYgradeleveldesc;*//*自连接查询员エ的姓名、上级姓名SELECTe.last_name员エ姓名,m.last_name上级姓名FROMemployeeseJOINemployeesmONe.manager_id=m.employee_id;查询员エ含有k字符的姓名、上级姓名SELECTe.last_name员エ姓名,m.last_name上级姓名FROMemployeeseJOINemployeesmONe.manager_id=m.employee_idWHEREe.last_nameLIKE'%k%';外连接用于查询ー个表中有另一个表中没有的数据,分主表和从表外连接的查询结果为主表中的左右记录若主表中有匹配的信息则显示匹配值,若无则显示null外连接查询结果=内连接结果+主表中有而从表中没有的记录左外连接:leftjoin左边是主表右外连接:rightjion右边是主表全外连接:内连接结果+表1中有表2中没有的+表2中有表1中没有的(mysql不支持)左外右外两表交换顺序,可以实现同样效果查询男朋友不在男生表中的女生名SELECT'name,bo.*FROMbeautybLEFTJOINboysboONb.boyfriend_id=bo.idWHEREbo.idisnull;查询哪个部门没有员エSELECTdepartmentname,lastnameFROMdepartmentsdLEFTJOINemployeeseONd.department!d=e.departmentidWHEREemployee_idisnull;交叉连接:笛卡尔集的效果(cross)*/P86作业2、子查询/*子查询出现在其他语句中的selec语句,称为子查询或内查询外部的查询语句称为主查询或外查询分类:子査询:select后面仅仅支持标量子查询(结果集只有•行一列)from后面支持表子查询(结果集可以为多行多列)where或having后面标量子查询(结果集一行一列)【单行】列子查询(结果集一列多行)【多行】行子查询(结果集一行多列)exists后面(相关子查询)表子查询(结果集多行多列)ー、where或having标量子程序一般搭配着单行操作符使用:<>>=<==◊(运算符)列子子查询一般搭配着多行操作符使用:inanysomeall子查询顺序优先与主查询查询谁的エ资比Abe!的高.先查询Abelエ资SELECTsalaryFROMemployeesWHERElast_name=,AbeT;.查询员エ的信息,满足salary>Abelエ资FROMemployeesWHEREsalaryXSELECTsalaryFROMemployeesWHERElastname二'Abel');返回job-id与141号员エ相同,salary比143号员エ多的员エ姓名、jobid和エ资.查询141号员エ信息SELECTjob_idfromemployeesWHEREemployeeid=141;.查询143号的salarysalary>(SELECTsalaryFROMemployeesWHEREemployee」d二143);.查询员エ的姓名、job_id和エ资,要求:job_id=1.,エ资>2.SELECTlastname,job_id,salaryFROMemployeesWHEREjob_id=(SELECTjob_idfromemployeesWHEREemployee_id=141)ANDsalary>(SELECTsalaryFROMemployeesWHEREemployee_id=143);返回公司エ资最少的员エ姓名,job-id和salary1、查询员エ最低工资SELECTMIN(salary)FROMemployees;2、查询员エ姓名,jobid和salary,要求salary”.SELECTlast_name,job_id,salaryFROMemployeesWHEREsalary=(SELECTMIN(salary)FROMemployees);查询最低工资大于50号部门最低工资的部门id和其最低工资L查询50号部门的最低工资SELECTMIN(salary)FROMemployeesWHEREdepartment_id=50;2.满足min(salary)大于LSELECTdepartmentid,MIN(salary)FROMemployeesGROUPBYdepartment_idHAVINGMIN(salary)>(SELECTMIN(salary)FROMemployeesWHEREdepartment_id=50);二、列子查询(多行)INヽNOTIN 等于列表中的任意ー个ANY、SOME 和子查询返回的某ー个值比较ALL 和子查询返回的索引值比较返回!ocation_id是1400或是1700的部门中的所有员エ姓名1.查询1400或1700的部门编号SELECTdepartment_id,locationidFROMdepartmentsWHERElocationidIN(1400,1700);2.SELECTlast_name,d.department_id,location_idFROMemployeese,departmentsdWHEREd.department_idIN(SELECTdepartment_idFROMdepartmentsWHERElocation_idIN(1400,1700));返回其他部门中比jobid为IT_PROG部门任一エ资低的员エ的员エ号,姓名,job.id,以salary.先查询jobid的it_progエ资SELECTsalary,job_idFROMemployeesWHEREjob_id='IT_PROG';.条件是1.SELECTlastname,employeeid,job_id,salaryFROMemployeesWHEREsalary<ANY(FROMemployeesWHEREjob_id=,IT_PROG,)ANDjob_idく〉’IT_PROG';三、FROM后面,子查询结果充当从ー张表,必须取别名查询每个部门平均エ资等级.先查询每个部门平均エ资SELECTavg(salary)FROMemployeesGROUPBYdepartmentid;.查询エ资等级,条件salary在最高和最低工资之间P92四、exists后面(相关子査询):判断后面査询字句有没有结果,布尔类型结果只有1和0P94作业3、分页查询/*分页查询:LIMIT显示条目的其实索引起始索引是。,显示的条目个数当显示的数据ー页显示不全,需要分页提交sql语句请求放在语句最后查询前5条员エ信息SELECT*FROMemployeesLIMIT0,5;有奖金的员エ的信息,并且エ资较高的前十名显示出来SELECT*FROMemployeesWHEREcommissionpctISNOTNULLORDERBYsalaryDESCLIMIT0,9;P9*/4、联合查询联合查询:UNION,将多条查询语句的结果合并成一个结果,会自动去重需要查询多个表之间没有直接联系,但查询信息ー样多条查询语句的列的类型和数据最好一至UNION关键字字段默认去重,UNIONALL可以包含重复项SELECTxxFROM表1UNIONSELECTxxFROM表2;三、增删改查:数据操作语言DML/*DML语言数据操作语言插入:INSERT修改:UPDATE删除:DELETEー、插入方式1INSERTINTO表(列,。。。)VALUES(值,。。。。),(值,。。。。);列和值的个数需一致,需对应支持插入多行支持查询INSERTINTO表(id,name)SELECT10,‘人名‘;INSERTintobeauty(id,name',sex,phone)VALUES(13,"唐心‘,‘女,,137592846),(14,'唐集‘,'女',137592847);方式2INSERTINTO表SET列=值,列=值,。。。i二、修改语句.修改単表记录UPDATE表SET列=新值,列=新值,列=新值....[WHERE筛选条件];修改beautybiao中姓唐的女神的电话为!5096712641UPDATEbeautySETphone=WHEREname'LIKE’唐%';修改boys表中id为2的名称为张飞,魅力值10UPDATEboysSETboyName=1张飞’,userCP=10WHEREid=2;.修改多表记录(补充)92:UPDATE表1别名,表2别名SET歹lj=值WHERE连接条件AND筛选条件;99:UPDATE表!别名INNER|LEET|RIGHTJOIN表2别名ON连接条件set歹!|=值WHERE筛选条件;修改张无忌女朋友的手机号为114UPDATEboysboinnerJOINbeautybONb.boyfriend_id=bo.idSETb.phone=114WHEREboyName=’张无忌‘;修改没有男朋友的女神的男朋友编号都为2UPDATEbeautybLEFTJOINboysboONb.boyfriend_id=bo.idSETb.boyfriend_id=2WHEREbo.idisnull;三、删除语句方法一:DELETE1、单表删除DELETEFROM表WHERE条件删除手机号以9结尾的女神信息DELETEFROMbeautyWHEREphonelike'%9';2、多表删除【补充】92:DELETE删除表的别名FROM表1别名,表2别名WHERE条件99:DELETE删除表的别名FROM表1别名!NNER|LEH|RIGHTJOIN表2别名ON连接条件WHERE筛选条件;删除张无忌女朋友下信息DELETEbFROMbeautybINNERJOINboysboONb.boyfriend_id=bo.idWHEREbo.boyName=>张无忌’;删除黄晓明的信息以及他女朋友的信息DELETEb,boFROMbeautybINNERJOINboysboONb.boyfriend_id=bo.idWHEREbo.boyName=‘黄晓明‘;方法二:TRUNCATE.删除整个表内容,不可以加where条件TRUNCATETABLE表名;DELETE与TRUNCATE:DELETE删除数据再插入数据自增长从断点开始,而truncate从1开始DELETE操作有返回值也可以回滚,TRUNCATE没有返回值也不可以冋滚作业P110四、数据定义语言DDL/*DDL语言,数据定义语言库和表的管理创建:CREATE刪除:ALTER修改:dropー、库的管理创建、修改、删除1、创建库CREATEDATABASE库名;创建books数据库CREATEDATABASEIFNOTEXISTSbooks;(IFNOTEXISTS判断库是否存在,存在不创建,不存在则创建)更改数据库字符集ALTERDATABASE表CHARACTERSET字符集(gbkutf8);库的删除DROPDATABASE表;二、表的管理创建、删除、修改创建表autorCREATETABLEIFNOTEXISTSautor(idIN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论