精华内容
下载资源
问答
  • 3_SQL语句

    2020-11-19 22:18:43
    使用方法 方式一: 通过在命令行敲命令来操作 方式二: 通过图型界面工具,如 Navicat 等 ...SQL 语言分为 4 个部分:DDL(定义)、DML(操作)、DQL(查询)、DCL(控制) ...1)SQL语句可以换行,要以分号结

    MySQL的语法规范

    ​ 1.不区分大小写,但建议关键字大写,表名、列名小写
    ​ 2.每条命令最好用分号结尾
    ​ 3.每条命令根据需要,可以进行缩进 或换行
    ​ 4.注释
    ​ 单行注释:#注释文字
    ​ 单行注释:-- 注释文字
    ​ 多行注释:/* 注释文字 */


    SQL的语言分类

    ​ DQL(Data Query Language):数据查询语言
    ​ select
    ​ DML(Data Manipulate Language):数据操作语言
    ​ insert 、update、delete
    ​ DDL(Data Define Languge):数据定义语言
    ​ create、drop、alter
    ​ TCL(Transaction Control Language):事务控制语言
    ​ commit、rollback


    SQL的常见命令

    show databases; 查看所有的数据库
    use 库名; 打开指定 的库
    show tables ; 显示库中的所有表
    show tables from 库名;显示指定库中的所有表
    create table 表名(
    	字段名 字段类型,	
    	字段名 字段类型
    ); 创建表
    
    desc 表名; 查看指定表的结构
    select * from 表名;显示表中的所有数据
    

    DQL语言的学习

    进阶1:基础查询

    语法:

    SELECT  要查询的东西   FROM 表名;
    
    类似于Java中 :System.out.println(要打印的东西);
    
    特点:
    ① 通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
    ② 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数
    
    #进阶1:基础查询
    /*
    语法:
    select 查询列表 from 表名;
    
    
    类似于:System.out.println(打印东西);
    
    特点:
    
    1、查询列表可以是:表中的字段、常量值、表达式、函数
    2、查询的结果是一个虚拟的表格
    */
    
    USE myemployees;
    
    #1.查询表中的单个字段
    
    SELECT last_name FROM employees;
    
    #2.查询表中的多个字段
    SELECT last_name,salary,email FROM employees;
    
    #3.查询表中的所有字段
    
    #方式一:
    SELECT 
        `employee_id`,
        `first_name`,
        `last_name`,
        `phone_number`,
        `last_name`,
        `job_id`,
        `phone_number`,
        `job_id`,
        `salary`,
        `commission_pct`,
        `manager_id`,
        `department_id`,
        `hiredate` 
    FROM
        employees ;
        
    #方式二:  
     SELECT * FROM employees;
    
    说明:` ` 只是为了标识
     
     #4.查询常量值
     SELECT 100;
     SELECT 'john';
     
     #5.查询表达式
     SELECT 100%98;
     
     #6.查询函数
     SELECT VERSION();
     
     
     #7.起别名
     /*
     ①便于理解
     ②如果要查询的字段有重名的情况,使用别名可以区分开来
     
     */
     #方式一:使用as
    SELECT 100%98 AS 结果;
    SELECT last_name AS 姓,first_name AS 名 FROM employees;
    
    #方式二:使用空格
    SELECT last_name 姓,first_name 名 FROM employees;
    
    #案例:查询salary,显示结果为 out put
    SELECT salary AS "out put" FROM employees;
    
    
    #8.去重
    
    
    #案例:查询员工表中涉及到的所有的部门编号
    SELECT DISTINCT department_id FROM employees;
    
    
    #9.+号的作用
    
    /*
    
    java中的+号:
    ①运算符,两个操作数都为数值型
    ②连接符,只要有一个操作数为字符串
    
    mysql中的+号:
    仅仅只有一个功能:运算符
    
    select 100+90; 两个操作数都为数值型,则做加法运算
    select '123'+90;只要其中一方为字符型,试图将字符型数值转换成数值型
    			如果转换成功,则继续做加法运算
    select 'john'+90;	如果转换失败,则将字符型数值转换成0
    
    select null+10; 只要其中一方为null,则结果肯定为null
    
    */
    
    #案例:查询员工名和姓连接成一个字段,并显示为 姓名
    
    
    SELECT CONCAT('a','b','c') AS 结果;
    
    SELECT 
    	CONCAT(last_name,first_name) AS 姓名
    FROM
    	employees;
    	
    

    案例:

    #1.	下面的语句是否可以执行成功  
    SELECT last_name , job_id , salary AS sal
    FROM employees; 
    
    #2.下面的语句是否可以执行成功  
    SELECT  *  FROM employees; 
    
    
    #3.找出下面语句中的错误 
    SELECT employee_id , last_name,
    salary * 12 AS "ANNUAL  SALARY"
    FROM employees;
    
    
    
    #4.显示表departments的结构,并查询其中的全部数据
    
    DESC departments;
    SELECT * FROM `departments`;
    
    #5.显示出表employees中的全部job_id(不能重复)
    SELECT DISTINCT job_id FROM employees;
    
    #6.显示出表employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
    
    SELECT 
    	IFNULL(commission_pct,0) AS 奖金率,
    	commission_pct
    FROM 
    	employees;
    	
    	
    #-------------------------------------------
    
    SELECT
    	CONCAT(`first_name`,',',`last_name`,',',`job_id`,',',IFNULL(commission_pct,0)) AS out_put
    FROM
    	employees;
    
    

    进阶2:条件查询

    条件查询:根据条件过滤原始表的数据,查询到想要的数据
    语法:

    #进阶2:条件查询
    /*
    
    语法:
    	select 
    		查询列表
    	from
    		表名
    	where
    		筛选条件;
    
    分类:
    	一、按条件表达式筛选
    	
    	简单条件运算符:> < = != <> >= <=
    	
    	二、按逻辑表达式筛选
    	逻辑运算符:
    	作用:用于连接条件表达式
    		&&   ||    !
    		and  or  not
    		
    	&&和and:两个条件都为true,结果为true,反之为false
    	||或or: 只要有一个条件为true,结果为true,反之为false
    	!或not: 如果连接的条件本身为false,结果为true,反之为false
    	
    	三、模糊查询
    		like
    		between and
    		in
    		is null
    	
    */
    
    #一、按条件表达式筛选
    
    #案例1:查询工资>12000的员工信息
    
    SELECT 
    	*
    FROM
    	employees
    WHERE
    	salary>12000;
    	
    	
    #案例2:查询部门编号不等于90号的员工名和部门编号
    SELECT 
    	last_name,
    	department_id
    FROM
    	employees
    WHERE
    	department_id<>90;
    
    
    #二、按逻辑表达式筛选
    
    #案例1:查询工资在10000到20000之间的员工名、工资以及奖金
    SELECT
    	last_name,
    	salary,
    	commission_pct
    FROM
    	employees
    WHERE
    	salary>=10000 AND salary<=20000;
    #案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
    SELECT
    	*
    FROM
    	employees
    WHERE
    	NOT(department_id>=90 AND  department_id<=110) OR salary>15000;
    	
    
    

    进阶3:模糊查询

    语法:

    #三、模糊查询
    /*
    like
    between and
    in
    is null | is not null
    
    */
    #1.like
    /*
    特点:
    ①一般和通配符搭配使用
    	通配符:
    	% 任意多个字符,包含0个字符
    	_ 任意单个字符
    */
    
    #案例1:查询员工名中包含字符a的员工信息
    
    select 
    	*
    from
    	employees
    where
    	last_name like '%a%';#abc
    	
    #案例2:查询员工名中第三个字符为n,第五个字符为l的员工名和工资
    select
    	last_name,
    	salary
    FROM
    	employees
    WHERE
    	last_name LIKE '__n_l%';
    
    #案例3:查询员工名中第二个字符为_的员工名
    
    SELECT
    	last_name
    FROM
    	employees
    WHERE
    	last_name LIKE '_$_%' ESCAPE '$';
    
    #2.between and
    /*
    ①使用between and 可以提高语句的简洁度
    ②包含临界值
    ③两个临界值不要调换顺序
    
    */
    
    #案例1:查询员工编号在100到120之间的员工信息
    
    SELECT
    	*
    FROM
    	employees
    WHERE
    	employee_id >= 120 AND employee_id<=100;
    #----------------------
    SELECT
    	*
    FROM
    	employees
    WHERE
    	employee_id BETWEEN 120 AND 100;
    
    #3.in
    /*
    含义:判断某字段的值是否属于in列表中的某一项
    特点:
    	①使用in提高语句简洁度
    	②in列表的值类型必须一致或兼容
    	③in列表中不支持通配符
    	
    */
    #案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
    
    SELECT
    	last_name,
    	job_id
    FROM
    	employees
    WHERE
    	job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';
    
    #------------------
    
    SELECT
    	last_name,
    	job_id
    FROM
    	employees
    WHERE
    	job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');
    
    #4、is null
    
    /*
    =或<>不能用于判断null值
    is null 或 is not null 可以判断null值
    
    */
    #案例1:查询没有奖金的员工名和奖金率
    SELECT
    	last_name,
    	commission_pct
    FROM
    	employees
    WHERE
    	commission_pct IS NULL;
    
    #案例1:查询有奖金的员工名和奖金率
    SELECT
    	last_name,
    	commission_pct
    FROM
    	employees
    WHERE
    	commission_pct IS NOT NULL;
    
    #----------以下为
    SELECT
    	last_name,
    	commission_pct
    FROM
    	employees
    
    WHERE 
    	salary IS 12000;
    

    案例:

    #安全等于  <=>
    
    #案例1:查询没有奖金的员工名和奖金率
    SELECT
    	last_name,
    	commission_pct
    FROM
    	employees
    WHERE
    	commission_pct <=>NULL;
    	
    	
    #案例2:查询工资为12000的员工信息
    SELECT
    	last_name,
    	salary
    FROM
    	employees
    
    WHERE 
    	salary <=> 12000;
    	
    
    #is null pk <=>
    
    IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
    <=>    :既可以判断NULL值,又可以判断普通的数值,可读性较低
    
    

    进阶4:排序 order by

    语法:

    #进阶4:排序查询
    /*
    语法:
    select 查询列表
    from 表名
    【where  筛选条件】
    order by 排序的字段或表达式;
    
    
    特点:
    1、asc代表的是升序,可以省略
       desc代表的是降序
    2、order by子句可以支持 单个字段、别名、表达式、函数、多个字段
    3、order by子句在查询语句的最后面,除了limit子句
    */
    
    #1、按单个字段排序
    SELECT * FROM employees ORDER BY salary DESC;
    
    #2、添加筛选条件再排序
    
    #案例:查询部门编号>=90的员工信息,并按员工编号降序
    
    SELECT *
    FROM employees
    WHERE department_id>=90
    ORDER BY employee_id DESC;
    
    
    #3、按表达式排序
    #案例:查询员工信息 按年薪降序
    
    SELECT *,salary*12*(1+IFNULL(commission_pct,0))
    FROM employees
    ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
    
    
    #4、按别名排序
    #案例:查询员工信息 按年薪升序
    
    SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
    FROM employees
    ORDER BY 年薪 ASC;
    
    #5、按函数排序
    #案例:查询员工名,并且按名字的长度降序
    
    SELECT LENGTH(last_name),last_name 
    FROM employees
    ORDER BY LENGTH(last_name) DESC;
    
    #6、按多个字段排序
    
    #案例:查询员工信息,要求先按工资降序,再按employee_id升序
    SELECT *
    FROM employees
    ORDER BY salary DESC,employee_id ASC;
    

    案例:

    #1.查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序
    
    SELECT last_name,department_id,salary*12*(1+IFNULL(commission_pct,0)) 年薪
    FROM employees
    ORDER BY 年薪 DESC,last_name ASC;
    
    
    #2.选择工资不在8000到17000的员工的姓名和工资,按工资降序
    SELECT last_name,salary
    FROM employees
    
    WHERE salary NOT BETWEEN 8000 AND 17000
    ORDER BY salary DESC;
    
    #3.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
    
    SELECT *,LENGTH(email)
    FROM employees
    WHERE email LIKE '%e%'
    ORDER BY LENGTH(email) DESC,department_id ASC;
    
    

    进阶5:常见函数

    语法:

    #进阶5:常见函数
    
    /*
    
    概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
    好处:1、隐藏了实现细节  2、提高代码的重用性
    调用:select 函数名(实参列表) 【from 表】;
    特点:
    	①叫什么(函数名)
    	②干什么(函数功能)
    
    分类:
    	1、单行函数
    	如 concat、length、ifnull等
    	2、分组函数
    	
    	功能:做统计使用,又称为统计函数、聚合函数、组函数
    	
    常见函数:
    一、单行函数
    	字符函数:
    	length: 获取字节个数(utf-8一个汉字代表3个字节,gbk为2个字节)
    	concat
    	substr
    	instr
    	trim
    	upper
    	lower
    	lpad
    	rpad  
    	replace
    	
    	数学函数:
    	round
    	ceil
    	floor
    	truncate
    	mod
    	
    	日期函数:
    	now
    	curdate
    	curtime
    	year
    	month
    	monthname
    	day
    	hour
    	minute
    	second
    	str_to_date
    	date_format
    	
    	其他函数:
    	version
    	database
    	user
    	
    	控制函数:
    	if
    	case
    
    */
    
    
    #一、字符函数
    
    #1.length 获取参数值的字节个数
    SELECT LENGTH('john');
    SELECT LENGTH('张三丰hahaha');
    
    SHOW VARIABLES LIKE '%char%'
    
    #2.concat 拼接字符串
    
    SELECT CONCAT(last_name,'_',first_name) 姓名 FROM employees;
    
    #3.upper、lower
    SELECT UPPER('john');
    SELECT LOWER('joHn');
    #示例:将姓变大写,名变小写,然后拼接
    SELECT CONCAT(UPPER(last_name),LOWER(first_name))  姓名 FROM employees;
    
    #4.substr、substring
    注意:索引从1开始
    #截取从指定索引处后面所有字符
    SELECT SUBSTR('李莫愁爱上了陆展元',7)  out_put;
    
    #截取从指定索引处指定字符长度的字符
    SELECT SUBSTR('李莫愁爱上了陆展元',1,3) out_put;
    
    
    #案例:姓名中首字符大写,其他字符小写然后用_拼接,显示出来
    
    SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2)))  out_put
    FROM employees;
    
    #5.instr 返回子串第一次出现的索引,如果找不到返回0
    
    SELECT INSTR('杨不殷六侠悔爱上了殷六侠','殷八侠') AS out_put;
    
    #6.trim
    
    SELECT LENGTH(TRIM('    张翠山    ')) AS out_put;
    
    SELECT TRIM('aa' FROM 'aaaaaaaaa张aaaaaaaaaaaa翠山aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')  AS out_put;
    
    
    #7.lpad 用指定的字符实现左填充指定长度
    
    SELECT LPAD('殷素素',2,'*') AS out_put;
    
    
    #8.rpad 用指定的字符实现右填充指定长度
    
    SELECT RPAD('殷素素',12,'ab') AS out_put;
    
    
    #9.replace 替换
    
    SELECT REPLACE('周芷若周芷若周芷若周芷若张无忌爱上了周芷若','周芷若','赵敏') AS out_put;
    
    
    
    #二、数学函数
    
    #round 四舍五入
    SELECT ROUND(-1.55);
    SELECT ROUND(1.567,2);
    
    
    #ceil 向上取整,返回>=该参数的最小整数
    
    SELECT CEIL(-1.02);
    
    #floor 向下取整,返回<=该参数的最大整数
    SELECT FLOOR(-9.99);
    
    #truncate 截断
    
    SELECT TRUNCATE(1.69999,1);
    
    #mod取余
    /*
    mod(a,b) :  a-a/b*b
    
    mod(-10,-3):-10- (-10)/(-3)*(-3)=-1
    */
    SELECT MOD(10,-3);
    SELECT 10%3;
    
    
    #三、日期函数
    
    #now 返回当前系统日期+时间
    SELECT NOW();
    
    #curdate 返回当前系统日期,不包含时间
    SELECT CURDATE();
    
    #curtime 返回当前时间,不包含日期
    SELECT CURTIME();
    
    
    #可以获取指定的部分,年、月、日、小时、分钟、秒
    SELECT YEAR(NOW()) 年;
    SELECT YEAR('1998-1-1') 年;
    
    SELECT  YEAR(hiredate) 年 FROM employees;
    
    SELECT MONTH(NOW()) 月;
    SELECT MONTHNAME(NOW()) 月; # 英文
    
    
    #str_to_date 将字符通过指定的格式转换成日期
    
    SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put;
    
    #查询入职日期为1992--4-3的员工信息
    SELECT * FROM employees WHERE hiredate = '1992-4-3';
    
    SELECT * FROM employees WHERE hiredate = STR_TO_DATE('4-3 1992','%c-%d %Y');
    
    
    #date_format 将日期转换成字符
    
    SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS out_put;
    
    #查询有奖金的员工名和入职日期(xx月/xx日 xx年)
    SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年') 入职日期
    FROM employees
    WHERE commission_pct IS NOT NULL;
    
    
    #四、其他函数
    
    SELECT VERSION();
    SELECT DATABASE();
    SELECT USER();
    
    
    #五、流程控制函数
    #1.if 函数: if else 的效果
    
    SELECT IF(10<5,'大','小');
    
    SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,呵呵','有奖金,嘻嘻') 备注
    FROM employees;
    
    
    #2.case函数的使用一: switch case 的效果
    
    /*
    java中
    switch(变量或表达式){
    	case 常量1:语句1;break;
    	...
    	default:语句n;break;
    }
    
    mysql中
    
    case 要判断的字段或表达式
    when 常量1 then 要显示的值1或语句1;
    when 常量2 then 要显示的值2或语句2;
    ...
    else 要显示的值n或语句n;
    end
    */
    
    /*案例:查询员工的工资,要求
    
    部门号=30,显示的工资为1.1倍
    部门号=40,显示的工资为1.2倍
    部门号=50,显示的工资为1.3倍
    其他部门,显示的工资为原工资
    
    */
    
    
    SELECT salary 原始工资,department_id,
    CASE department_id
    WHEN 30 THEN salary*1.1
    WHEN 40 THEN salary*1.2
    WHEN 50 THEN salary*1.3
    ELSE salary
    END AS 新工资
    FROM employees;
    
    
    
    #3.case 函数的使用二:类似于 多重if
    /*
    java中:
    if(条件1){
    	语句1;
    }else if(条件2){
    	语句2;
    }
    ...
    else{
    	语句n;
    }
    
    mysql中:
    
    case 
    when 条件1 then 要显示的值1或语句1
    when 条件2 then 要显示的值2或语句2
    。。。
    else 要显示的值n或语句n
    end
    */
    
    #案例:查询员工的工资的情况
    如果工资>20000,显示A级别
    如果工资>15000,显示B级别
    如果工资>10000,显示C级别
    否则,显示D级别
    
    
    SELECT salary,
    CASE 
    WHEN salary>20000 THEN 'A'
    WHEN salary>15000 THEN 'B'
    WHEN salary>10000 THEN 'C'
    ELSE 'D'
    END AS 工资级别
    FROM employees;
    

    日期格式参考:

    格式符 说明 格式符 说明
    %Y 4位数字表示年份 %y 表示两位数字表示年份
    %M 月名表示月份(January,…) %m 两位数字表示月份(01,02,03。。。)
    %b 缩写的月名(Jan.,Feb.,…) %c 数字表示月份(1,2,3,…)
    %D 英文后缀表示月中的天数(1st,2nd,3rd,…) %d 两位数字表示月中的天数(01,02…)
    %e 数字形式表示月中的天数(1,2,3,4,5…)
    %H 两位数字表示小数,24小时制(01,02…) %h和%I 两位数字表示小时,12小时制(01,02…)
    %k 数字形式的小时,24小时制(1,2,3) %l 数字形式表示小时,12小时制(1,2,3,4…)
    %i 两位数字表示分钟(00,01,02) %S和%s 两位数字表示秒(00,01,02…)
    %W 一周中的星期名称(Sunday…) %a 一周中的星期缩写(Sun.,Mon.,Tues.,…)
    %w 以数字表示周中的天数(0=Sunday,1=Monday…)
    %j 以3位数字表示年中的天数(001,002…) %U 以数字表示年中的第几周,(1,2,3。。)其中Sunday为周中第一天
    %u 以数字表示年中的第几周,(1,2,3。。)其中Monday为周中第一天
    %T 24小时制 %r 12小时制
    %p AM或PM %% 表示%

    案例:

    #1.	显示系统时间(注:日期+时间)
    SELECT NOW();
    
    #2.	查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new salary)
    
    SELECT employee_id,last_name,salary,salary*1.2 "new salary"
    FROM employees;
    #3.	将员工的姓名按首字母排序,并写出姓名的长度(length)
    
    SELECT LENGTH(last_name) 长度,SUBSTR(last_name,1,1) 首字符,last_name
    FROM employees
    ORDER BY 首字符;
    
    
    #4.	做一个查询,产生下面的结果
    <last_name> earns <salary> monthly but wants <salary*3>
    Dream Salary
    King earns 24000 monthly but wants 72000
    
    
    SELECT CONCAT(last_name,' earns ',salary,' monthly but wants ',salary*3) AS "Dream Salary"
    FROM employees
    WHERE salary=24000;
    
    
    #5.	使用case-when,按照下面的条件:
    job                  grade
    AD_PRES            A
    ST_MAN             B
    IT_PROG             C
    SA_REP              D
    ST_CLERK           E
    产生下面的结果
    Last_name	Job_id	Grade
    king	AD_PRES	A
    
    
    SELECT last_name,job_id AS  job,
    CASE job_id
    WHEN 'AD_PRES' THEN 'A' 
    WHEN 'ST_MAN' THEN 'B' 
    WHEN 'IT_PROG' THEN 'C' 
    WHEN 'SA_PRE' THEN 'D'
    WHEN 'ST_CLERK' THEN 'E'
    END AS Grade
    FROM employees
    WHERE job_id = 'AD_PRES';
    

    进阶6:分组(聚合)函数

    语法:

    #二、分组函数
    /*
    功能:用作统计使用,又称为聚合函数或统计函数或组函数
    
    分类:
    sum 求和、avg 平均值、max 最大值 、min 最小值 、count 计算个数
    
    特点:
    1、sum、avg 一般用于处理数值型
       max、min、count 可以处理任何类型
    
    2、以上分组函数都忽略null值
    
    3、可以和distinct搭配实现去重的运算
    
    4、count函数的单独介绍
    一般使用count(*)用作统计行数
    
    5、和分组函数一同查询的字段要求是group by后的字段 【*】
    
    */
    
    #1、简单 的使用
    
    SELECT SUM(salary) FROM employees;
    SELECT AVG(salary) FROM employees;
    SELECT MIN(salary) FROM employees;
    SELECT MAX(salary) FROM employees;
    SELECT COUNT(salary) FROM employees;
    
    
    SELECT SUM(salary) 和,AVG(salary) 平均,MAX(salary) 最高,MIN(salary) 最低,COUNT(salary) 个数
    FROM employees;
    
    SELECT SUM(salary) 和,ROUND(AVG(salary),2) 平均,MAX(salary) 最高,MIN(salary) 最低,COUNT(salary) 个数
    FROM employees;
    
    #2、参数支持哪些类型
    
    SELECT SUM(last_name) ,AVG(last_name) FROM employees;
    
    SELECT SUM(hiredate) ,AVG(hiredate) FROM employees;
    
    SELECT MAX(last_name),MIN(last_name) FROM employees;
    
    SELECT MAX(hiredate),MIN(hiredate) FROM employees;
    
    SELECT COUNT(commission_pct) FROM employees;
    
    SELECT COUNT(last_name) FROM employees;
    
    #3、是否忽略 null
    
    SELECT SUM(commission_pct) ,AVG(commission_pct),SUM(commission_pct)/35,SUM(commission_pct)/107 FROM employees;
    
    SELECT MAX(commission_pct) ,MIN(commission_pct) FROM employees;
    
    SELECT COUNT(commission_pct) FROM employees;
    SELECT commission_pct FROM employees;
    
    
    #4、和 distinct 搭配
    
    SELECT SUM(DISTINCT salary),SUM(salary) FROM employees;
    
    SELECT COUNT(DISTINCT salary),COUNT(salary) FROM employees;
    
    
    
    #5、count 函数的详细介绍
    
    SELECT COUNT(salary) FROM employees;
    
    SELECT COUNT(*) FROM employees;
    
    SELECT COUNT(1) FROM employees;
    
    效率:
    MYISAM存储引擎下  ,COUNT(*)的效率高
    INNODB存储引擎下,COUNT(*)和COUNT(1)的效率差不多,比COUNT(字段)要高一些
    
    
    #6、和分组函数一同查询的字段有限制
    
    SELECT AVG(salary),employee_id  FROM employees;
    
    

    **案例:**DATEDIFF()函数的使用

    #1.查询公司员工工资的最大值,最小值,平均值,总和
    
    SELECT MAX(salary) 最大值,MIN(salary) 最小值,AVG(salary) 平均值,SUM(salary) 和
    FROM employees;
    
    #2.查询员工表中的最大入职时间和最小入职时间的相差天数 (DIFFRENCE)
    
    SELECT MAX(hiredate) 最大,MIN(hiredate) 最小,(MAX(hiredate)-MIN(hiredate))/1000/3600/24 DIFFRENCE
    FROM employees;
    
    SELECT DATEDIFF(MAX(hiredate),MIN(hiredate)) DIFFRENCE
    FROM employees;
    
    SELECT DATEDIFF('1995-2-7','1995-2-6');
    
    
    #3.查询部门编号为90的员工个数
    
    SELECT COUNT(*) FROM employees WHERE department_id = 90;
    

    进阶7:分组查询

    语法:

    #进阶5:分组查询
    
    /*
    语法:
    
    select 查询列表
    from 表
    【where 筛选条件】
    group by 分组的字段
    【order by 排序的字段】;
    
    特点:
    1、和分组函数一同查询的字段必须是group by后出现的字段
    
    2、筛选分为两类:分组前筛选和分组后筛选
    		针对的表			  位置		连接的关键字
    分组前筛选	原始表			group by前	 where
    	
    分组后筛选	group by后的结果集    	group by后	 having
    
    
    问题1:分组函数做筛选能不能放在where后面
    
    答:不能
    
    问题2:where——group by——having
    
    一般来讲,能用分组前筛选的,尽量使用分组前筛选,提高效率
    
    3、分组可以按单个字段也可以按多个字段
    
    4、可以搭配着排序使用 [ 放在整个最后 ]
    
    */
    
    #引入:查询每个部门的员工个数
    SELECT COUNT(*) FROM employees WHERE department_id=90;
    
    #1.简单的分组
    
    #案例1:查询每个工种的员工平均工资
    SELECT AVG(salary),job_id
    FROM employees
    GROUP BY job_id;
    
    #案例2:查询每个位置的部门个数
    
    SELECT COUNT(*),location_id
    FROM departments
    GROUP BY location_id;
    
    
    #2、可以实现分组前的筛选
    
    #案例1:查询邮箱中包含a字符的 每个部门的最高工资
    
    SELECT MAX(salary),department_id
    FROM employees
    WHERE email LIKE '%a%'
    GROUP BY department_id;
    
    
    #案例2:查询有奖金的每个领导手下员工的平均工资
    
    SELECT AVG(salary),manager_id
    FROM employees
    WHERE commission_pct IS NOT NULL
    GROUP BY manager_id;
    
    
    
    #3、分组后筛选
    
    #案例:查询哪个部门的员工个数>5
    
    #①查询每个部门的员工个数
    SELECT COUNT(*),department_id
    FROM employees
    GROUP BY department_id;
    
    #② 筛选刚才①结果
    
    SELECT COUNT(*),department_id
    FROM employees
    
    GROUP BY department_id
    
    HAVING COUNT(*)>5;
    
    
    #案例2:每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
    
    SELECT job_id,MAX(salary)
    FROM employees
    WHERE commission_pct IS NOT NULL
    GROUP BY job_id
    HAVING MAX(salary)>12000;
    
    
    #案例3:领导编号>102的每个领导手下的最低工资大于5000的领导编号和最低工资
    
    manager_id>102
    
    SELECT manager_id,MIN(salary)
    FROM employees
    GROUP BY manager_id
    HAVING MIN(salary)>5000;
    
    
    #4.添加排序
    
    #案例:每个工种有奖金的员工的最高工资>6000的工种编号和最高工资,按最高工资升序
    
    SELECT job_id,MAX(salary) m
    FROM employees
    WHERE commission_pct IS NOT NULL
    GROUP BY job_id
    HAVING m>6000
    ORDER BY m ;
    
    
    #5.按多个字段分组
    
    #案例:查询每个工种每个部门的最低工资,并按最低工资降序
    
    SELECT MIN(salary),job_id,department_id
    FROM employees
    GROUP BY department_id,job_id
    ORDER BY MIN(salary) DESC;
    

    案例:

    #1.查询各 job_id 的员工工资的最大值,最小值,平均值,总和,并按job_id升序
    
    SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary),job_id
    FROM employees
    GROUP BY job_id
    ORDER BY job_id;
    
    
    #2.查询员工最高工资和最低工资的差距(DIFFERENCE)
    SELECT MAX(salary)-MIN(salary) DIFFRENCE
    FROM employees;
    
    
    #3.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
    SELECT MIN(salary),manager_id
    FROM employees
    WHERE manager_id IS NOT NULL
    GROUP BY manager_id
    HAVING MIN(salary)>=6000;
    
    
    
    #4.查询所有部门的编号,员工数量和工资平均值,并按平均工资降序
    SELECT department_id,COUNT(*),AVG(salary) a
    FROM employees
    GROUP BY department_id
    ORDER BY a DESC;
    
    
    #5.选择具有各个 job_id 的员工人数
    SELECT COUNT(*) 个数,job_id
    FROM employees
    GROUP BY job_id;
    

    进阶8:连接查询

    语法:

    #进阶6:连接查询
    /*
    含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
    
    笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行
    
    发生原因:没有有效的连接条件
    如何避免:添加有效的连接条件
    
    分类:
    
    	按年代分类:
    	sql92标准:仅仅支持内连接
    	sql99标准【推荐】:支持内连接+外连接(左外和右外)+交叉连接
    	
    	按功能分类:
    		内连接:
    			等值连接
    			非等值连接
    			自连接
    		外连接:
    			左外连接
    			右外连接
    			全外连接
    			
    		交叉连接
    
    */
    
    SELECT * FROM beauty;
    
    SELECT * FROM boys;
    
    SELECT NAME,boyName FROM boys,beauty
    WHERE beauty.boyfriend_id= boys.id;
    
    #一、sql92标准
    #1、等值连接
    /*
    
    ① 多表等值连接的结果为多表的 交集部分
    ②n表连接,至少需要 n-1 个连接条件
    ③ 多表的顺序没有要求
    ④一般需要为表起别名
    ⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选
    
    */
    
    
    #案例1:查询女神名和对应的男神名
    SELECT NAME,boyName 
    FROM boys,beauty
    WHERE beauty.boyfriend_id= boys.id;
    
    #案例2:查询员工名和对应的部门名
    
    SELECT last_name,department_name
    FROM employees,departments
    WHERE employees.`department_id`=departments.`department_id`;
    
    
    #2、为表起别名
    /*
    ①提高语句的简洁度
    ②区分多个重名的字段
    
    注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定
    
    */
    #查询员工名、工种号、工种名
    
    SELECT e.last_name,e.job_id,j.job_title
    FROM employees  e,jobs j
    WHERE e.`job_id`=j.`job_id`;
    
    
    #3、两个表的顺序是否可以调换
    
    #查询员工名、工种号、工种名
    
    SELECT e.last_name,e.job_id,j.job_title
    FROM jobs j,employees e
    WHERE e.`job_id`=j.`job_id`;
    
    
    #4、可以加筛选
    
    #案例:查询有奖金的员工名、部门名
    
    SELECT last_name,department_name,commission_pct
    
    FROM employees e,departments d
    WHERE e.`department_id`=d.`department_id`
    AND e.`commission_pct` IS NOT NULL;
    
    #案例2:查询城市名中第二个字符为o的部门名和城市名
    
    SELECT department_name,city
    FROM departments d,locations l
    WHERE d.`location_id` = l.`location_id`
    AND city LIKE '_o%';
    
    #5、可以加分组
    
    
    #案例1:查询每个城市的部门个数
    
    SELECT COUNT(*) 个数,city
    FROM departments d,locations l
    WHERE d.`location_id`=l.`location_id`
    GROUP BY city;
    
    
    #案例2:查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资
    SELECT department_name,d.`manager_id`,MIN(salary)
    FROM departments d,employees e
    WHERE d.`department_id`=e.`department_id`
    AND commission_pct IS NOT NULL
    GROUP BY department_name,d.`manager_id`;
    #6、可以加排序
    
    
    #案例:查询每个工种的工种名和员工的个数,并且按员工个数降序
    
    SELECT job_title,COUNT(*)
    FROM employees e,jobs j
    WHERE e.`job_id`=j.`job_id`
    GROUP BY job_title
    ORDER BY COUNT(*) DESC;
    
    
    
    
    #7、可以实现三表连接?
    
    #案例:查询员工名、部门名和所在的城市
    
    SELECT last_name,department_name,city
    FROM employees e,departments d,locations l
    WHERE e.`department_id`=d.`department_id`
    AND d.`location_id`=l.`location_id`
    AND city LIKE 's%'
    
    ORDER BY department_name DESC;
    
    
    
    #2、非等值连接
    
    
    #案例1:查询员工的工资和工资级别
    
    
    SELECT salary,grade_level
    FROM employees e,job_grades g
    WHERE salary BETWEEN g.`lowest_sal` AND g.`highest_sal`
    AND g.`grade_level`='A';
    
    /*
    select salary,employee_id from employees;
    select * from job_grades;
    CREATE TABLE job_grades
    (grade_level VARCHAR(3),
     lowest_sal  int,
     highest_sal int);
    
    INSERT INTO job_grades
    VALUES ('A', 1000, 2999);
    
    INSERT INTO job_grades
    VALUES ('B', 3000, 5999);
    
    INSERT INTO job_grades
    VALUES('C', 6000, 9999);
    
    INSERT INTO job_grades
    VALUES('D', 10000, 14999);
    
    INSERT INTO job_grades
    VALUES('E', 15000, 24999);
    
    INSERT INTO job_grades
    VALUES('F', 25000, 40000);
    
    */
    
    
    #3、自连接
    
    #案例:查询 员工名和上级的名称
    
    SELECT e.employee_id,e.last_name,m.employee_id,m.last_name
    FROM employees e,employees m
    WHERE e.`manager_id`=m.`employee_id`;
    
    #二、sql99语法
    /*
    语法:
    	select 查询列表
    	from 表1 别名 【连接类型】
    	join 表2 别名 
    	on 连接条件
    	【where 筛选条件】
    	【group by 分组】
    	【having 筛选条件】
    	【order by 排序列表】
    	
    
    分类:
    内连接(★):inner
    外连接
    	左外(★):left 【outer】
    	右外(★):right 【outer】
    	全外:full【outer】
    交叉连接:cross 
    
    */
    
    
    #一)内连接
    /*
    语法:
    
    select 查询列表
    from 表1 别名
    inner join 表2 别名
    on 连接条件;
    
    分类:
    等值
    非等值
    自连接
    
    特点:
    ①添加排序、分组、筛选
    ②inner可以省略
    ③ 筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
    ④inner join连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集
    
    
    */
    
    
    #1、等值连接
    #案例1.查询员工名、部门名
    
    SELECT last_name,department_name
    FROM departments d
     JOIN  employees e
    ON e.`department_id` = d.`department_id`;
    
    
    
    #案例2.查询名字中包含e的员工名和工种名(添加筛选)
    SELECT last_name,job_title
    FROM employees e
    INNER JOIN jobs j
    ON e.`job_id`=  j.`job_id`
    WHERE e.`last_name` LIKE '%e%';
    
    
    
    #3. 查询部门个数>3的城市名和部门个数,(添加分组+筛选)
    
    #①查询每个城市的部门个数
    #②在①结果上筛选满足条件的
    SELECT city,COUNT(*) 部门个数
    FROM departments d
    INNER JOIN locations l
    ON d.`location_id`=l.`location_id`
    GROUP BY city
    HAVING COUNT(*)>3;
    
    
    
    
    #案例4.查询哪个部门的员工个数>3的部门名和员工个数,并按个数降序(添加排序)
    
    #①查询每个部门的员工个数
    SELECT COUNT(*),department_name
    FROM employees e
    INNER JOIN departments d
    ON e.`department_id`=d.`department_id`
    GROUP BY department_name
    
    #② 在①结果上筛选员工个数>3的记录,并排序
    
    SELECT COUNT(*) 个数,department_name
    FROM employees e
    INNER JOIN departments d
    ON e.`department_id`=d.`department_id`
    GROUP BY department_name
    HAVING COUNT(*)>3
    ORDER BY COUNT(*) DESC;
    
    #5.查询员工名、部门名、工种名,并按部门名降序(添加三表连接)
    
    SELECT last_name,department_name,job_title
    FROM employees e
    INNER JOIN departments d ON e.`department_id`=d.`department_id`
    INNER JOIN jobs j ON e.`job_id` = j.`job_id`
    
    ORDER BY department_name DESC;
    
    #二)非等值连接
    
    #查询员工的工资级别
    
    SELECT salary,grade_level
    FROM employees e
     JOIN job_grades g
     ON e.`salary` BETWEEN g.`lowest_sal` AND g.`highest_sal`;
     
     
     #查询工资级别的个数>20的个数,并且按工资级别降序
     SELECT COUNT(*),grade_level
    FROM employees e
     JOIN job_grades g
     ON e.`salary` BETWEEN g.`lowest_sal` AND g.`highest_sal`
     GROUP BY grade_level
     HAVING COUNT(*)>20
     ORDER BY grade_level DESC;
     
     
     #三)自连接
     
     #查询员工的名字、上级的名字
     SELECT e.last_name,m.last_name
     FROM employees e
     JOIN employees m
     ON e.`manager_id`= m.`employee_id`;
     
      #查询姓名中包含字符k的员工的名字、上级的名字
     SELECT e.last_name,m.last_name
     FROM employees e
     JOIN employees m
     ON e.`manager_id`= m.`employee_id`
     WHERE e.`last_name` LIKE '%k%';
     
     
     #二、外连接
     
     /*
     应用场景:用于查询一个表中有,另一个表没有的记录
     
     特点:
     1、外连接的查询结果为主表中的所有记录
    	如果从表中有和它匹配的,则显示匹配的值
    	如果从表中没有和它匹配的,则显示null
    	外连接查询结果=内连接结果+主表中有而从表没有的记录
    
     2、左外连接,left join左边的是主表
          右外连接,right join右边的是主表
    
     3、左外和右外交换两个表的顺序,可以实现同样的效果 
    
     4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
    
     */
     #引入:查询男朋友 不在男神表的的女神名
     
     SELECT * FROM beauty;
     SELECT * FROM boys;
     
     #左外连接
     SELECT b.*,bo.*
     FROM boys bo
     LEFT OUTER JOIN beauty b
     ON b.`boyfriend_id` = bo.`id`
     WHERE b.`id` IS NULL;
     
     
     #案例1:查询哪个部门没有员工
     #左外
     SELECT d.*,e.employee_id
     FROM departments d
     LEFT OUTER JOIN employees e
     ON d.`department_id` = e.`department_id`
     WHERE e.`employee_id` IS NULL;
     
     
     #右外
     
      SELECT d.*,e.employee_id
     FROM employees e
     RIGHT OUTER JOIN departments d
     ON d.`department_id` = e.`department_id`
     WHERE e.`employee_id` IS NULL;
     
     
     #全外
     
     
     USE girls;
     SELECT b.*,bo.*
     FROM beauty b
     FULL OUTER JOIN boys bo
     ON b.`boyfriend_id` = bo.id;
     
    
     #交叉连接
     
     SELECT b.*,bo.*
     FROM beauty b
     CROSS JOIN boys bo;
     
     
     
     #sql92和 sql99pk
     /*
     功能:sql99支持的较多
     可读性:sql99实现连接条件和筛选条件的分离,可读性较高
     */
    
    

    展开全文
  • sqlyog的快捷键

    2020-12-29 11:02:18
    文章目录用户管理粘贴SQL语句查询执行SQL格式程序SQL窗口其他结果显示/隐藏连接对象浏览器数据库/表工具书签可视数据对照 用户管理 Ctrl+U 打开用户管理器 粘贴SQL语句 Alt+Shift+I 插入语句 Alt+Shift+U ...

    用户管理

    Ctrl+U				打开用户管理器
    

    粘贴SQL语句

    Alt+Shift+I		插入语句
    Alt+Shift+U		更新语句
    Alt+Shift+D		删除语句
    Alt+Shift+S		查询语句
    

    查询执行

    F8				执行当前查询并编辑结果
    F9				执行查询(默认)
    Ctrl+F9			执行全部查询(默认)
    

    SQL格式程序

    F12					格式化当前查询
    Ctrl+F12			格式化选中的查询
    Shift+F12			格式化所有查询
    

    SQL窗口

    Ctrl+T				新查询窗口
    Alt+F2				Rename Query Editor
    Ctrl+E				切换焦点至SQL窗口
    Ctrl+Y					重做
    Ctrl+Z				撤销
    Ctrl+X				剪切
    Ctrl+V				粘贴
    Ctrl+H				替换
    Ctrl+G				转到
    Ctrl+O				打开文件
    Ctrl+Shift+U		将选中部分变为大写
    Ctrl+Shift+L		将选中部分变为小写
    Ctrl+Shift+C		在SQL窗口中对选中部分标注
    Ctrl+Shift+R		删除选中部分的注释
    Ctrl+Shift+T    	插入模板
    Ctrl+Space			列出所有标记
    Ctrl+Enter			列出匹配的标签
    Ctrl+Shift+Space	列出函数和路由参数
    

    其他

    F1					帮助
    Ctrl+Shift+O		Open Session Savepoint
    Ctrl+Shift+S		Save Session
    Ctrl+Shift+X		End Session
    Ctrl+Shift+H		打开历史记录标签
    Ctrl+Shift+I		打开信息标签页
    Ctrl+C				复制
    Ctrl+A				全选
    Ctrl+F				Find (SQL Window/Result Window And Table Data In Text Mode/Blob Viewer/JSON Viewer)
    F3					查找下一个(SQL窗口/结果窗口和文字模式表数据/Blob查看器)
    Ctrl+S				保存
    Ctrl+PgUp			切换到上一个标签页
    Ctrl+PgDown			切换到下一个标签页
    DEL					删除选中部分
    Alt+Shift+L			改变语言
    Alt+L				关闭标签页
    Alt+F4				退出
    

    结果

    F11				插入更新窗口
    Ctrl+R			将焦点切换至结果面板中的当前标签页
    Ctrl+L			切换结果窗口/表数据为数据表格/文字模式
    Ctrl+Alt+C		导出表数据为CSV,Excel,SQL等...
    Ctrl+Alt+E		备份数据库为SQL转储
    Ctrl+Shift+M	从CSV导入数据
    Ctrl+Shift+E	导出结果集
    Ctrl+Space		打开外键查找
    Alt+1...8		选择结果窗口里的标签页(18)
    Alt+9			选择结果窗口里的最后一个标签页
    

    显示/隐藏

    Ctrl+Shift+1		显示/隐藏对象浏览器
    Ctrl+Shift+2		显示/隐藏结果面板
    Ctrl+Shift+3		显示/隐藏查询窗口
    

    连接

    Ctrl+M				创建新连接
    Ctrl+N				以当前连接属性创建新连接
    Ctrl+F4/Ctrl+W		断开当前连接
    Ctrl+Tab			切换到下一个连接
    Ctrl+Shift+Tab		切换到上一个连接
    Ctrl+1...8			选择连接(18)
    Ctrl+9				选择最后一个连接
    

    对象浏览器

    F5				刷新对象浏览器(默认)
    Ctrl+B			切换焦点至对象浏览器
    Ctrl+Shift+B	将焦点放在对象浏览器过滤器上
    

    数据库/表

    Ctrl+D				创建数据库
    F4					Create Table/Index/View/Store Proc/Function/Trigger/Event
    F6					修改数据库/表结构/索引/视图/存储过程/函数/触发器/事件
    F2					重命名表/视图/触发器/事件
    Shift+Del			截断数据库/表
    F7					管理索引窗口
    F10					关系/外键
    Ctrl+Alt+R			重新排序列
    Ctrl+Alt+T			表诊断
    Ctrl+Alt+F			输出对话框
    Ctrl+Shift+Alt+S	以HTML形式创建数据库结构
    Ctrl+Shift+Q		执行SQL脚本
    

    工具

    Ctrl+Alt+W		SQLyog 数据库同步向导
    Ctrl+Alt+Q		可视化数据对照
    Ctrl+Q			架构同步工具
    Ctrl+Alt+O		SQLyog 外部数据导入向导
    Ctrl+Alt+N		通知服务向导
    Ctrl+Alt+S		计划备份向导
    Ctrl+K			查询创建器
    Ctrl+Alt+D		架构设计器
    Ctrl+Shift+D	数据查找
    

    书签

    Ctrl+Shift+F		添加当前SQL至收藏
    

    可视化数据对照

    Ctrl+T			选择一个表格
    Ctrl+Enter		比较
    Ctrl+H			隐藏类似的行
    Ctrl+N			下一处差别
    Ctrl+P			上一处差别
    Ctrl+L			源
    Ctrl+R			目标
    Ctrl+Right		合并至目标
    Ctrl+Left		合并至源头
    Ctrl+Q			预览 SQL
    Ctrl+S			实施更改
    Ctrl+Z			还原更改
    Ctrl+Shift+Z	还原所选更改
    
    展开全文
  • 数据库基础

    2020-10-22 13:51:46
    MySQL基础操作 使用方法: 方法一:通过命令行来操作(有助于命令的掌握) 方法二:通过图形界面工具,如 ...SQL语句中的快捷键 \G格式化输出(文本式、竖立显示) \s查看服务器端信息 \c结束命令输入操作 \q退出当

    MySQL基础操作

    使用方法:
    方法一:通过命令行来操作(有助于命令的掌握)
    方法二:通过图形界面工具,如 Navicat等(在熟练掌握后再使用)
    方法三:通过编程语言(python,php,java,go...)执行mysql命令
    

    SQL(Structure query language)结构化查询语言

    SQL语言分为4个部分:DDL(定义)、DML(操作)、DQL(查询)、DCL(控制)
    

    SQL语句中的快捷键

    \G格式化输出(文本式、竖立显示)
    \s查看服务器端信息
    \c结束命令输入操作
    \q退出当前sql命令行模式
    \h查看帮助
    

    操作数据库的步骤

    连接,打开库,操作,关闭退出

    1.通过命令行连接MySQL

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-blpf5Bf8-1603345677130)(E:\KaiKeBa\kaikeba\0825-王焕章-数据库基础_1004\imgs\import.png)]

    数据库语法的特点

    1)SQL语句可以换行,要以分号结尾

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kMO7DAJk-1603345677132)(E:\KaiKeBa\kaikeba\0825-王焕章-数据库基础_1004\imgs\import1.png)]

    2)命令不区分大小写,关键字和函数建议用大写

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HpoPiOe4-1603345677133)(E:\KaiKeBa\kaikeba\0825-王焕章-数据库基础_1004\imgs\import2.png)]

    3)关于提示符

    如果提示符为’>‘那么需要输入一个’回车’

    同理如果提示符为’>那么同样需要输入一个’

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VavOFcMV-1603345677135)(E:\KaiKeBa\kaikeba\0825-王焕章-数据库基础_1004\imgs\import3.png)]

    4)命令打错并换行后不能修改上一行的命令,可以用 \c取消

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u8ZOTEAu-1603345677137)(E:\KaiKeBa\kaikeba\0825-王焕章-数据库基础_1004\imgs\import4.png)]

    2.数据库操作

    查看数据库 show databases;

    创建数据库 create database 库名 default charset=utf8mb4;

    删除数据库 drop database 库名;

    删库有风险,操作需谨慎
    

    打开数据库 use 库名

    3.数据表操作

    数据库管理系统中,可以有很多库,每个数据库中可以包括多张数据表

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-05xoG4Sk-1603345677138)(E:\KaiKeBa\kaikeba\0825-王焕章-数据库基础_1004\imgs\import5.png)]

    查看表:

    show tables;

    创建表:

    creat table '表名'(字段1 类型,字段2 类型) engine=innodb default charset=utf8mb4;

    创建表:如果表不存在则创建,如果存在就不执行这条命令

    create table if not exists 表名(字段1 类型,字段2 类型);

    create table if not exists users(
        id int not null primary key auto_increment,
        name varchar(4) not null,
        age tinyint,
        sex enum('男','女')
    )engine=innodb default charset=utf8mb4;
    

    删除表:drop table 表名;

    表结构:desc 表名;

    查看建表语句:show create table 表名;

    4.数据操作 增删改查

    插入

    insert into 表名(字段1,字段2,字段3) values(值1,值2,值3);

    insert into 表名(字段1,字段2,字段3) values(a值1,a值2,a值3),(b值1,b值2,b值3);

    查询

    select * from 表名;

    select 字段1,字段2,字段3 from 表名;

    select * from 表名 where 字段=某个值;

    修改

    update 表名 set 字段=某个值 where 条件;

    update 表名 set 字段1=值1,字段2=值2 where 条件;

    update 表名 set 字段=字段+值 where 条件;

    删除

    delete from 表名 where 字段=某个值;

    四.退出MySQL

    exit; 或者 quit;

    一、MySQL的数据类型

    数据类型是定义列中可以存储什么类型的数据以及该数据实际怎样存储的基本规则
    数据类型限制存储在数据列,列中的数据。例如,数值数据类型列只能接受数值类型的数据
    在设计表时,应该特别重视所用的数据类型。使用错误的数据类型可能会严重的影响应用程序的功能和性能。
    更改包含数据的列不是一件小事(而且这样做可能导致数据丢失)。
    

    基本常用的数据类型

    数据类型:整型、浮点型、字符串、日期等
    
    1、字符串数据类型

    最常用的数据类型是串数据类型。它们存储串,如名字、地址、电话号码、邮政编码等。

    不管使用何种形式的串数据类型,串值都必须包括在引号内。

    有两种基本的串类型,分别为定长串和变长串。

    • 定长串:cahr

      1.接受长度固定的字符串,其长度是在创建表时指定的。

      定长列不允许存储多于指定长度字符的数据。

      2.指定长度后,就会分配固定的存储空间用于存放数据。

      char(7) 不管实际插入多少字符,它都会占用7个字符的位置
      
    • 变长串:varchar

      存褚可变长度的字符串

      carchar(7) 如果实际插入4个字符,那么它只占4个字符位置,当然插入的数据长度不能超过7个字符。

    注意

    既然变长串数据类型这样灵活为什么还要使用定长数据类型?
    回答:因为性能,MySQL处理定长串远比处理变长串快的多
    
    • Text 变长文本类型存储

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jWmlndhy-1603345677139)(E:\KaiKeBa\kaikeba\0825-王焕章-数据库基础_1004\imgs\数据类型2.png)]

    2.数值类型

    数值数据类型存储数值,MySQL支持多种数值数据类型,每种存储的数值具有不同的取值范围。支持的取值范围越大,所需存储空间越多。

    与字符串不一样,数值不应该括在引号内。

    decimal(5,2)表示数值总共5位,小数占两位
    float. 
    tinyint 1字节(8位) 0-255,-128,127
    int	4字节,	-21亿,  21亿。0-42亿
    
    MySQL 中没有专门存储货币的数据类型,一般情况下使用DECIMAL(8,2)
    

    有符号或无符号

    所有数值数据类型(除BIT和BOOLEAN外)都可以有符号或无符号

    • 有符号数值列可以存储正或负的数值
    • 无符号数值列只能存储正数。
    • 默认情况为有符号,但如果你知道自己不需要存储负值,可以使用UNSIGNED关键字

    注意

    如果将邮政编码类似于01234存储为数值类型,则保存的将是数值1234,此时需要使用字符串类型手机号应该用什么进行存储呢?
    
    3、日期和时间类型

    MySQL使用专门的数据类型来存储日期和时间值

    datetime 8字节 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
    
    4、二进制数据类型

    二进制数据类型可存储任何数据(甚至包括二进制信息),如图像、多媒体、字处理文档等

    通常情况下,不会使用二进制数据类型进行,多没有数据的存储

    [

    二、表的字段约束

    • unsigned 无符号(给数值类型使用,表示为正数,不写可以表示负数都可以)

    • 字段类型后面加括号限制宽度

      • char(5),varchar(7) 在字符类型后面加限制 表示 字符串的长度

      • int(4) 没有意义,默认无符号的int为int(11),有符号的int(10)

        在数字类型后面加(5),对取值的范围值没有影响的。

      • int(4) unsigned zerofill 只有当给int类型设置有前导0时,设置int的宽度才有意义。

    • not null 不能为空,在操作数据库时如果输入该字段的数据为NULL,就会报错

    • default 这是默认值

    • primary key 主键不能为空,且唯一,一般和自动递增一起配合使用。

    • auto_increment 定义列为自增属性,一般用于主键,数值会自动加1

    • unique 唯一索引(数据不能重复:用户名)可以增加查询速度,但是会降低插入和更新速度

    三、MySQL的运算符

    • 算数运算符:+、-、*、/、%

    • 比较运算符:=、>、<、>=、<=、!=

    • 数据库特有的比较:in、not in、is、null、is not null、like、between、and

    • 逻辑运算符:and、or、not

    • like:支持特殊符号%和_;

      其中%表示任意数量的任意字符,_表示任意一位字符
      

    四、主键

    1、表中的每一行都应该有可以唯一表示自己的一列,用于记录两条记录不能重复,任意两行都不具有相同的主键值。

    2、应该总是定义主键,所任并不是总是都需要主键,但大多数数据库设计人员都应保证他们创建的每个表具有一个主键,以便于以后的数据操纵和管理。

    要求

    • 记录一旦插入到表中,主键最好不要在修改

    • 不允许NULL

    • 不在主键列中使用可能会更改的值。

      (例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改名字时,必须要更改这个主键。)
      
    • 自增整数类型:数据库会在插入数据时自动为每一条记录分配一个自增整数,这样我们就完全不用担心主键重复,也不用自己预先生成主键

    • 可以使用多个列作为联合主键,但联合主键并不常用,使用多列作为主键是,所有列值的组合必须是唯一的

    MySQL数据库与数据表操作

    • 数据库的操作
      • 数据库创建
      • 数据库删除
    • 数据表的操作
      • 数据表的创建
      • 数据表的修改(表结构)
      • 数据表的删除

    数据库的操作

    1.数据库的创建
    # 链接mysql数据库后,进入mysql可以操作数据
    
    # 1. 创建库
    create database if not exists chuange default charset=utf8mb4;
    -- 1. 数据库 chuange 如果不存在则创建数据库,存在则不创建
    -- 2. 创建 chuange 数据库,并设置字符集为utf8mb4
    -- 3. 无特殊情况都要求字符集为 utf8 或者 utf8mb4 的字符编码
    
    2.查看所有库
    # 1. 查看所有库
    show databases;
    
    3.打开库/进入库/选择库
    # use 库名
    use chuange
    
    4.删除库

    删库有风险,动手需谨慎

    # 删除库,那么库中的所有数据都在磁盘中删除
    drop database 库名
    

    数据表的操作

    1.创建表

    语法格式:

    create table 表名(字段名,类型,【字段约束】…);

    实例

    # 一下创建一个 users 为表名的表
    create table users(
        -- 创建ID字段,为正整数,不允许为空,主键,自动递增
        id int unsigned not null primary key auto_increment,
        -- 创建 存储 名字的字段,为字符穿类型,最大长度为5个字符,不允许为空
        username varchar(5) not null,
        -- 创建存储 密码 的字段,固定长度 32 字符,不允许为空
        password char(32) not null,
        -- 创建 年龄 字段,不允许为空,默认值为 20
        age tinyint not null default 20
    )engine=innodb default charset=utf8mb4;
    
    # 查看表结构
    desc users;
    
    # 查看建表语句
    show create table users;
    

    创建表的基本原则:

    • 表名和字段名尽可能的符合命名规范,并且最好能够见名知意
    • 表中数据必须有唯一表示,即主键定义,无特殊情况,主键都为数字并且自增即可
    • 表中字段所对应的类型设置合理,并限制合理长度
    • 表引擎推荐使用 innodb ,并无特殊情况都要求为 *utf8mb4 的字符编码
    2.修改表结构

    语法格式:alter table 表名 action (更改的选项)

    添加字段

    # 语法:alter table 表名 add 添加的字段信息
    -- 在 users 表中 追加 一个 num 字段
    alter table users add num int not null;
    
    -- 在指定字段后面追加字段 在 users 表中 age 字段后面 添加一个 email 字段
    alter table users add email varchar(50) after age;
    
    -- 在指定字段后面追加字段,在 users 表中 age字段后面 添加一个 phone
    alter table users add phone char(11) not null after age;
    
    -- 在表的最前面添加一个字段
    alter table users add aa int first;
    

    删除字段

    # 删除字段 alter table 表名 drop 被删除的字段名
    alter table users drop aa;
    

    修改字段

    语法格式:alter table 表名 change|modify 被修改的字段信息
    change:可以修改字段名。
    modify:不能修改字段名。
    
    # 修改表中的 num 字段 类型, 使用  modify 不修改字段名
    alter table users modify num tinyint not null default 12;
    
    # 修改表中的 num 字段 为 int并且字段名为 nn
    alter table users change num mm int;
    
    # 注意:一般情况下,无特殊要求,不要轻易修改表结构
    
    3.修改表名
    # 语法:alter table 原表名 rename as 新表名
    
    4.更改表中的自增的值
    # 在常规情况下,auto_increment 默认从1开始继续递增
    alter table users auto_increment = 1000;
    
    5.修改表引擎
    # 推荐在定义表时,表引擎为 innodb。
    # 通过查看建表语句获取当前的表引擎
    mysql> show create table users\G;
    *************************** 1. row ***************************
    Table: users
    Create Table: CREATE TABLE `users` (
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    # 直接查看当前表状态信息
    mysql> show table status from tlxy where name = 'users'\G;
    *************************** 1. row ***************************
    Name: users
    Engine: InnoDB
    # 修改表引擎语句
    alter table users engine = 'myisam';
    
    6.删除表
    drop table 表名
    

    Mysql数据库表引擎与字符集

    1.服务器处理客户端请求

    其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:**客户端进程向服务器进程发送 一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。**那服务器进程对客户 端进程发送的请求做了什么处理,才能产生最后的处理结果呢?客户端可以向服务器发送增删改查各类请求,我们 这里以比较复杂的查询请求为例来画个图展示一下大致的过程:

    虽然查询缓存有时可以提升系统性能,但也不得不因维护这块缓存而造成一些开销,比如每次都要去查询缓 存中检索,查询请求处理完需要更新查询缓存,维护该查询缓存对应的内存区域。从MySQL 5.7.20开始,不 推荐使用查询缓存,并在MySQL 8.0中删除。

    2.存储引擎

    MySQL服务器把数据的存储和提取操作都封装到了一个叫 存储引擎的模块里。我们知道 是由一行一行的记录 组成的,但这只是一个逻辑上的概念,物理上如何表示记录,怎么从表中读取数据,怎么把数据写入具体的物理存 储器上,这都是 存储引擎 负责的事情。为了实现不同的功能, MySQL 提供了各式各样的 存储引擎 ,不同 存储引 擎 管理的表具体的存储结构可能不同,采用的存取算法也可能不同。

    存储引擎以前叫做 表处理器 ,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操 作。

    为了管理方便,人们把 连接管理查询缓存语法解析查询优化 这些并不涉及真实数据存储的功能划分为 MySQL server 的功能,把真实存取数据的功能划分为 存储引擎 的功能。各种不同的存储引擎向上边的 MySQL server 层提供统一的调用接口(也就是存储引擎API),包含了几十个底层函数,像"读取索引第一条内容"、“读取 索引下一条内容”、"插入记录"等等。

    所以在 MySQL server 完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返 回给客户端就好了。

    MySQL 支持非常多种存储引擎:

    存储引擎 描述
    ARCHIVE 用于数据存档(行被插入后不能再修改)
    BLACKHOLE 丢弃写操作,读操作会返回空内容
    CSV 在存储数据时,以逗号分隔各个数据项
    FEDERATED 用来访问远程表
    InnoDB 具备外键支持功能的事务存储引擎
    MEMORY 置于内存的表
    MERGE 用来管理多个MyISAM表构成的表集合
    MyISAM 主要的非事务处理存储引擎
    NDB MySQL集群专用存储引擎
    3,MyISAM和InnoDB表引擎的区别

    1) 事务支持

    MyISAM不支持事务,而InnoDB支持。

    事物:访问并更新数据库中数据的执行单元。事物操作中,要么都执行要么都不执行

    2) 存储结构

    MyISAM:每个MyISAM在磁盘上存储成三个文件。

    • .frm文件存储表结构。
    • .MYD文件存储数据。
    • .MYI文件存储索引。

    InnoDB:主要分为两种文件进行存储

    • .frm 存储表结构
    • .ibd 存储数据和索引 (也可能是多个.ibd文件,或者是独立的表空间文件)

    3) 表锁差异

    MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如 果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。**InnoDB:支持事务和行级锁,是 innodb的最大特色。**行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有 效的,非主键的WHERE都会锁全表的。

    4) 表主键

    MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。 InnoDB:如果没有设定主键或者非空唯 一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。 InnoDB的主键范围更大,最大是MyISAM的2倍。

    5) 表的具体行数

    MyISAM:保存有表的总行数,如果select count() from table;会直接取出出该值。 InnoDB:没有保存表的总行数 (只能遍历),如果使用select count() from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后, myisam和innodb处理的方式都一样。

    6) CURD操作

    MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。 InnoDB:如果你的数据执行大量的INSERT或 UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table 时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用 truncate table这个命令。

    7) 外键

    MyISAM:不支持 InnoDB:支持

    8) 查询效率

    MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。 推荐考虑使用InnoDB来替代MyISAM引擎,原因是InnoDB自身很多良好的特点,比如事务支持、存储 过程、视 图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多。 另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优 势。如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MyISAM的,这个具体情况可以自己斟酌。

    9)MyISAM和InnoDB两者的应用场景:

    MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那 么MyISAM是更好的选择。 InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要 执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。现在默认使用 InnoDB。

    展开全文
  • 2、格式化 Mapper 文件中的 SQL 关联到数据库,让 IDEA 认识你的 SQL。如何关联?选择右侧的database,添加数据库即可。如果之前没用请自行尝试。 语言自动注入(这一步是自动的,如果第一步正确,这一步无需操作)...

    1、格式化 Java 代码

    快捷键:Ctrl+Alt+L

    2、格式化 Mapper 文件中的 SQL

    1. 关联到数据库,让 IDEA 认识你的 SQL。如何关联?选择右侧的database,添加数据库即可。如果之前没用请自行尝试。
    2. 语言自动注入(这一步是自动的,如果第一步正确,这一步无需操作)。
      如果没有自动注入,则可以手动注入。在 SQL 语句上,按Alt+Enter,选择 Inject language or reference,再选择合适的语言即可
    3. 格式化:Ctrl+Alt+L

    参考:IDEA 如何格式化 MyBatis 的 mapper XML 中的 SQL?_慕课猿问

    3、格式化 HTML、JS 等文件。

    应该也是:Ctrl+Alt+L

    4、寻找 Java 类中没有被引用的方法

    步骤:点击Analyze→点击Inspect Code→选则当前文件→然后在下面的框中找WarningDeclaration redundancyUnused declaration。然后就可以了

    参考:java - IDEA 查看未使用的方法 - SegmentFault 思否

    转载于:https://www.cnblogs.com/buwuliao/p/11316916.html

    展开全文
  • 使用方法: ​ 方式一: 通过图型界面工具,如 Navicat 等( 高级课使用 ) ​ 方式二: 通过在命令行敲命令来操作 ( 基础阶段使用 ) ...SQL语句中的快捷键 \G 格式化输出(文本式,竖立显示)...
  • SQL Pretty Printer 2.8

    2009-10-22 09:34:13
    托盘方式的应用程序,提供快捷键,通过copy(ctrl+c),format(ctrl+alt+j),paste(ctrl+v) 可方便的格式化任意编辑器或数据库管理工具中的SQL语句格式化SQL的快捷键可以自定义,预定义快捷键为ctrl+alt+j。 主要...
  • SQL语句中的快捷键 \G 格式化输出(文本式,竖立显示) \s 查看服务器端信息 \c 结束命令输入操作 \q 退出当前sql命令行模式 \h 查看帮助 MySQL数据库doc命令行操作 连接mysql数据库 mysql -u 用户名 -p 密码 ...
  • 进入和关闭MySQL # 在链接数据库之前需要启动MySQL服务 ...# 通过命令行连接MySQL mysql -h localhost -u root -p -P 3306 ...SQL语句中的快捷键 \G 格式化输出(文本式、竖立显示) \s 查看服务器端
  • Dbeaver可以连接包括MySQL、SQL、hive在内的等等...ctrl + alt + F —— 对sql语句进行格式化,对于很长的sql语句很有用 #You can do this type of formatting for your data also in the way you feel appropria...
  • 6. 智能SQL语句自动完成功能 说实话SQLyog不好汉化,居多的资源,光非标部分ASCII、Unicode、UTF-8字符串都有,而且汉化很容易出bug。对ASCII的字符依然不知如何进行汉化,我直接写入汉字在运行后就会是乱码,这次...
  • SQLyog 是一个易于使用的、快速而简洁的图形管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库,而且它本身是完全免费的!!功能: 1、快速备份和恢复数据; 2、以GRID / TEXT 格式显示结果; 3、支持...
  • 6. 智能SQL语句自动完成功能 说实话SQLyog不好汉化,居多的资源,光非标部分ASCII、Unicode、UTF-8字符串都有,而且汉化很容易出bug。对ASCII的字符依然不知如何进行汉化,我直接写入汉字在运行后就会是乱码,这次...
  • SQLyog 是一个快速而简洁的图形管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库,由业界著名的Webyog公司出品。 使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。 1...
  • sqlyog是连接各种数据库的可视工具,非常良好。 主要有以下作用: 快速备份和恢复数据。 以GRID/TEXT格式显示结果。 支持客户端挑选、过滤数据。 批量执行很大的SQL脚本文件。 快速执行多重查询并能够返回每页超过...
  • 12. 智能SQL语句自动完成功能; SQLyog MySQL 基本功能: 快速备份和恢复数据。 以GRID/TEXT格式显示结果。 支持客户端挑选、过滤数据。 批量执行很大的SQL脚本文件。 快速执行多重查询并能够返回每页超过1000条的...
  • MySQL基础学习笔记1

    2020-09-26 21:09:26
    SQL语句中的快捷键 \G 格式化输出(文本式,竖立显示) \s 查看服务器端信息 \c 结束命令输入操作 \q 退出当前sql命令行模式 \h 查看帮助 数据库操作 查看数据库 show databases; 创建数据库 create database 库名 ...
  • SQLyog是一款快速而简洁的图形管理MYSQL数据库的工具软件。软件由业界著名的 Webyog 公司出品,其最大的功能就是可以在任何地点有效地管理用户自己的数据库。软件界面美观简洁、简单全面、实用方便,无需培训,...
  • 2020-11-01

    2020-11-01 00:08:20
    List item 数据: data 数据库: DB数据库管理系统:DBMS...数据SQL语句中的快捷键\G 格式化输出(文本式,竖立显示)\s 查看服务器端信息\c 结束命令输入操作\q 退出当前sql命令行模式\h 查看帮助二、连接数据库:.
  • 01-MySQL基础

    2020-12-12 19:35:11
    1、SQL语句中的快捷键 1. \G:格式化输出 2. \s:查看服务器端信息 3. \c:结束命令输入操作 4. \q:退出 5. \h:查看帮助 2、数据库操作 1. 查看数据库:show databases; 2. 创建数据库:create database ...
  • 周记录(第五周)

    2020-08-06 16:20:55
    数据库 数据库(Database)就是按照数据结构来组织,存储和管理数据的仓库。专业的数据库是专门对数据进行创建,访问,...SQL语句中的快捷键 \G 格式化输出(文本式,竖立显示) \s 查看服务器端信息 \c 结束命令输入操
  • 26411.8.2 基于窗体的更新 26411.8.3 用SQL语句进行更新 26411.8.4 用SQL Server存储过程进行更新 265第三部分 设计窗体和报表第12章 创建和使用窗体 26712.1 理解Access窗体和控件的角色 26712.2 使用窗体向导创建...
  • 26411.8.2 基于窗体的更新 26411.8.3 用SQL语句进行更新 26411.8.4 用SQL Server存储过程进行更新 265第三部分 设计窗体和报表第12章 创建和使用窗体 26712.1 理解Access窗体和控件的角色 26712.2 使用窗体向导创建...
  • 26411.8.2 基于窗体的更新 26411.8.3 用SQL语句进行更新 26411.8.4 用SQL Server存储过程进行更新 265第三部分 设计窗体和报表第12章 创建和使用窗体 26712.1 理解Access窗体和控件的角色 26712.2 使用窗体向导创建...
  • 26411.8.2 基于窗体的更新 26411.8.3 用SQL语句进行更新 26411.8.4 用SQL Server存储过程进行更新 265第三部分 设计窗体和报表第12章 创建和使用窗体 26712.1 理解Access窗体和控件的角色 26712.2 使用窗体向导创建...
  • 26411.8.2 基于窗体的更新 26411.8.3 用SQL语句进行更新 26411.8.4 用SQL Server存储过程进行更新 265第三部分 设计窗体和报表第12章 创建和使用窗体 26712.1 理解Access窗体和控件的角色 26712.2 使用窗体向导创建...
  • 26411.8.2 基于窗体的更新 26411.8.3 用SQL语句进行更新 26411.8.4 用SQL Server存储过程进行更新 265第三部分 设计窗体和报表第12章 创建和使用窗体 26712.1 理解Access窗体和控件的角色 26712.2 使用窗体向导创建...
  • 26411.8.2 基于窗体的更新 26411.8.3 用SQL语句进行更新 26411.8.4 用SQL Server存储过程进行更新 265第三部分 设计窗体和报表第12章 创建和使用窗体 26712.1 理解Access窗体和控件的角色 26712.2 使用窗体向导创建...
  • 26411.8.2 基于窗体的更新 26411.8.3 用SQL语句进行更新 26411.8.4 用SQL Server存储过程进行更新 265第三部分 设计窗体和报表第12章 创建和使用窗体 26712.1 理解Access窗体和控件的角色 26712.2 使用窗体向导创建...
  • 26411.8.2 基于窗体的更新 26411.8.3 用SQL语句进行更新 26411.8.4 用SQL Server存储过程进行更新 265第三部分 设计窗体和报表第12章 创建和使用窗体 26712.1 理解Access窗体和控件的角色 26712.2 使用窗体向导创建...
  • 26411.8.2 基于窗体的更新 26411.8.3 用SQL语句进行更新 26411.8.4 用SQL Server存储过程进行更新 265第三部分 设计窗体和报表第12章 创建和使用窗体 26712.1 理解Access窗体和控件的角色 26712.2 使用窗体向导创建...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 183
精华内容 73
关键字:

数据库sql语句格式化快捷键