《深入浅出MySQL》个人笔记(基础篇)

《深入浅出MySQL》个人笔记(基础篇)

基础篇 目录

SQL基础

SQL分类


DDL(Data Definition Languages)语句:

数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引、等数据库对象。常用语句关键字包括create、drop、alter等。


DML(Data Manipulation Languages)语句:

数据操控语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用的语句关键字包括insert、delete、update和setect等。


DCL(Data Control languages)语句:

数据控制语句,用于控制不同数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要语句关键字包括grant、revoke等。


DDL语句

DML语句

例:同时更新表emp中的字段sal和表dept中的字段deptname:

修改前两个表
修改结果

多表更新多用在根据一个表的字段来动态地更新另外一个表地字段。

3.  删除记录
     
     DELETE FROM tablename [WHERE CONDITION]
     例:delete from emp where ename='dony';
   
     一次删除多个表的数据
     DELETE t1,t2....,tn FROM t1,t2....,tn[WHERE CONDITION]
     例:detele a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3;  #p36
     
 4.  查询记录
 
     SELECT*FROM tablename [WHERE CONDITION]
     *代表所有记录,可以用逗号分隔所有字段来代替,例:
     select ename,hiredate,sal,deptno from emp;
     
     查询不重复记录
     去重显示用 distinct关键字,例:
     select distinct deptno from emp;
     
     条件查询
     
     使用 WHERE关键字实现,查询条件记录,使用例如=,或> < >= <= != 等比较运算符,或orand等逻辑运算联合查询
     例:select* from emp where deptno=1 and sal<3000;
     
     排序和限制
     
     排序使用 ORDER BY 来实现
     SELECT*FROM tablename [WHERE CONDITION] ORDER BY field1[DESC|ASC],...,fieldn[DESC|ASC]
     DESC降序 ASC升序 默认升序
         例: select * from emp order by sql                                                                            
         多字段: select * from emp order by deptno,sal desc;  #多字段排序会优先排一个字段,字段相同排序另外一个。
                                                                                   
         排序后显示部分记录
         使用 LIMIT 关键字
         SELECT ...[LIMIT offset_start,row_count]    #offset_start表示记录的其实偏移量,row_count表示显示的行数。
         例: select * from emp order by sal limit 3;
            select * from emp order by sal limit 1,3;     #从第二条显示,三条数据。
          #limit语法其他数据库不通用
            
     聚合
     
     汇总操作,语法:
     SELECT [field1,field2,...,fieldn] fun_name
     FROM tablename
     [WHERE where_conditition]
     [GROUP BY field1,field2,...,fieldn
     [WITH ROLLUP] ]
     [HAVING where_cotition]
     
     #fun_name 表示要做的聚合操作,也就是聚合函数,常用的有sum、count(*)(记录数)、max、min
     #GROUP BY 关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在group by 后面。
     #WITH ROLLUP是可选语法,表名是否对分类聚合后的结果进行再汇总。
     #HAVING关键字表示对分类后的结果再进行条件过滤

例:在emp表中统计公司总人数:


在此基础上,统计各个部门人数:

既统计各部门人数,又统计总人数:


统计人数大于1人的部门:


统计公司所有员工的薪水总额、最高和最低薪水:


  表连接
     
     当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。大致分为内连接和外连接.内连接金选出两张表中相互匹配的记录,而外连接会选出其他不匹配的记录.
     
     :查询所有雇员的名字和所在部门名称,雇员名称和部门分别放在两个表中,因此,需要使用表连接来进行查询:
         select ename,deptname from emp,dept where emp.deptno=dept.deptno;
         
     外连接分为左连接和右连接,意为左边所有记录和右边的交集部分呈现,右边所有记录和左边交集部分呈现。
     例: select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
         
        select ename,deptname from dept left join emp on dept.deptno=emp.deptno;
      
     
     子查询
     
     有时,进行查询时需要嵌套查询另外一个select语句的结果。用于子查询的关键字包括innot in=、!= existsnot exists等
     
     例: select* from emp where deptno in(select deptno from dept);
     如果查询近路数唯一,还可以用=代替in
         select* from emp where deptno = (select deptno from dept);
     
            
     记录联合
     将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示。需要用到 union  union all关键字来实现这样的功能
     SELECT* FROM t1
     UNION | UNION ALL
     SELECT* FROM t2
     ...
     UNION | UNION ALL
     SELECT* FROM tn
     
     UNION ALL 区别是把结果集合并在一起,而 UNION是将 UNION ALL后的结果进行一次 DISTINCT,去重记录后的结果。
     
     例结果见P47
     
     


常用函数

    1.字符串函数
    
    
        MySQL常用字符串函数
    
       CONCAT(S1,S1,...Sn)        连接S1....为一个字符串
       INSERT(str,x,y,instr)      将字符串str从x位置开始y个字符长的子串替换为字符串instr
       LOWER(str)              将字符串str中的所有字符变为小写
       UPPER(str)              ...大写...
       LEFT(strx)            返回字符串str最左边的x个字符
       RIGHT(strx)           ...右边...
       LPAD(strnpad)         用字符串pad对str最左边进行填充,知道长度为n个字符长度
       RPAD(strnpad)         ...右边...
       LTRIM(str)              去掉字符串str左侧的空格
       RTRIM(str)              ...右侧...
       TRIM(str)              去掉字符串行尾和行头的空格
       REPEAT(strx)           返回str重复x次的结果
       REPLACE(strab)        用字符串b替换字符串str中所出现的字符串a
       STRCMP(s1s2)           比较字符串s1和s2
       SUBSTRING(strxy)       返回从字符串str x位置起y个字符串长度的字串
       
       
       详细案例见P80
       
       
     2.数值函数
     
     
         MySQL中常用数值函数
         
       ABS(x)                 返回x的绝对值
       CEIL(x)                返回大于x的最小整数值
       FLOOR(x)               返回小于X的最大整数值
       MOD(xy)               返回x/y的模 #求余数
       RAND()                 返回01的随机值
       ROUND(xy)              返回参数x的四舍五入的有y位小数的值
       TRUNCATE(xy)           返回数字x截断为y位小数的结果
       
       
       详细案例见P83
       
       
     3.日期和时间函数
     
     
         MySQL中常用日期和时间函数
         
       CURDATE()               返回当期日期
       CURTIME()               返回当前时间
       NOW()                  返回当前的日期和时间
       UNIX_TIMESTAME(date)        返回日期date的UNIX时间戳
       FROM_UNIXTIME             返回UNIX时间戳的日期值
       WEEK(date)               返回日期date为一年中的第几周
       YEAR(date)               返回日期date的年份
       HOUR(time)               返回time的小时值
       MINUTE(time)              返回time的分钟值
       MONTHNAME(date)            返回date的月份
       DATE_FORMAT(datefmt)       返回按字符串fmt格式化日期date值
       DATE_ADD(dateINTERVAL expr type)  返回一个日期或时间值加上一个时间间隔的时间值
       DATEDIFF(exprexpr2)        返回起始时间expr和结束时间expe2之间的天数
       
       详细案例见P85
       
       
     4.流程函数
     
         MySQL的流程函数
         
       IF(valuet f)           如果value是真,返回t;否则返回f
       IFNULL(value1value2)      如果value1不为空,返回value1,飞则返回value2
       CASE WHEN[value1] THEN[result1]...ELSE[default]END      如果value1是真,返回resul1,否为返回default
       CASE [expr] WHEN [value1] THEN[result1]... ELSE[default]END   如果expr等于value1,返回result1,否则发挥default
       
       详细案例见P90
       
       
     5.其他常用函数
     
         MySQl其他常用函数
         
       DATABASE()             返回当前数据库名
       VERSION()               返回当前数据库版本
       UESR()                 返回当前登录用户名
       INET_ATON(IP)            返回IP地址的数字表示
       INET_NTOA(num)            返回数字代表的IP地址
       PASSSWORD(str)            返回字符串str的加密版本
       MD5()                  返回字符串str的MD5值

聚圣源二手车店起名大全两个维护是指什么内容陈姓男起名字根据名字起网名孩子起名男孩北京女孩起名门业公司起名大全好的物业公司起名字9画属金的起名吉利字金属商贸有限公司起名宋轶怎么读给宝宝起名字免费网大秦帝国txt宓妃小别胜新婚2021年牛宝宝起名冷少的契约情人枪火游戏d3dcompiler_47.dll饭店起名大全免费取名大全戴尔电脑怎么样劳务公司起名字科技开发有限公司起名起名字缺水火木同心战疫新生儿宝宝起名称测试修车店铺起名孙膑的师傅猪年宝宝张姓起名大全汽车配件公司起名大全集淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化