1.库操作

2.表操作

3.行操作

1.库操作

1)创建数据库

语法:

  1. create database 数据库名 charset utf8;

数据库命名规则:

  1.   由数字,字母,下划线,@,#,$ 等组成
  2.  
  3.   区分大小写
  4.  
  5.   唯一性  
  6.  
  7.   不能使用关键字如 create select
  8.  
  9.   不能单独使用数字
  10.  
  11.   最长128
  12.  
  13.   #基本上跟python或者js命名规则一样

2)相关操作:

查看数据库:

  1.   show databases; 查看所有的数据库
  2.  
  3.   show create database db1; 查看db1这个数据库
      
  4.   select database(); 查看当前所使用的数据库
      
      select user(); 查看当前所使用的用户

选择数据库:

  1. use 数据库名;

删除数据库:

  1. drop database 数据库名;

修改数据库:

  1. alter database db1 charset utf8;

2.表操作

表相当于文件,表中的一条记录就相当于文件的一行内容,表中的一条记录有对应的标题,成为表的字段

1).创建表

语法:

  1.   create table 表名(
  2.  
  3.     字段名 类型(宽度) 约束条件,
  4.  
  5.     字段名 类型(宽度) 约束条件,
  6.  
  7.     字段名 类型(宽度) 约束条件);

注意:

1.在同一张表中,字段名是不能重复的

2.宽度和约束条件可选,非必须,宽度指的是字段长度约束,例如: char(10) 里面的10

3.字段名和类型是必须要写的

2).查看表的结构

  1.   ①desc 表名;
  2.  
  3.   show create table t1\G;

修改表操作:

  1. 1.修改表名
  2. alter table 表名 rename 新表名;
  3. 2.增加字段
  4. alter table 表名 add 字段名 数据类型 [完整性约束条件], #注意这里可以通过逗号分割
  5. add 字段名 数据类型 [完整性约束条件]; #这里可以一次添加多个约束
  6.  
  7. alter table 表名 add 字段名 数据类型 [完整性约束条件] first(after);添加字段时,放在第一个字段位置(或者放在最后一个位置),通过firstafter可以将新添加的字段放在表的任意位置
  8. 3.删除字段
  9. alter table 表名 drop 字段名;
  10. 4.修改字段
  11. alter table 表名 modify 字段名 数据类型 [完整性约束条件];
  12. alter table 表名 change 旧字段名 新字段名 旧数据类型 [完整性约束条件];
  13. #change比modify多了一个改名字的功能,这一句是只改了一个字段名字,如果想改数据类型,在新字段名后面加上新数据类型即可

给字段添加一个外键属性的语句: alter table 表二名 add foreign key (表2的一个字段) references 表1名(表一的一个字段);

注: mysql中表名是不区分大小写的,如果将表名t1改为T1,是没用的,在数据库猴子那个表名都是小写的.

行操作

1) 插入数据

  1.   语法1:
  2.  
  3.   insert into 表名(字段1,字段2,字段3....) values(值1,值2,值3...); #指定字段来插入数据,插入的值要和你前面的字段相匹配
  4.  
  5.   语法2:
  6.  
  7.   insert into 表名 values (值1,值2...) # 如果不指定字段,就按照默认的几个字段来插入数据

2) 更新(修改)数据

  1.   语法:
  2.  
  3.   update 表名 set 字段1=值1,字段2=值2 where ...; #定位到where 然后将字段1和字段2的值改为值1,值2 定位到某个记录,并把这个记录中的某项内容更改

3)删除数据

  1.   语法:
  2.  
  3.   delete from 表名 where conition; #删除符合条件的记录
  4.  
  5.   delete from 表名;
  6.  
  7. # 如果不加where条件,则默认将表中的所有内容删除,但是清空所有的内容,一般我们用truncate,能够将id设置为0,delete不能讲id设置为0,在插入数据时,会按照之前的数据记录的id数继续递增

4).查询数据(重点)

单表查询和多表查询

1)单表查询

  1. 语法:
  2.  
  3.   select * from 表名; #*代表的是查询所有字段的数据
  4.  
  5.   select distinct 字段1,字段2...from 库名.表名
  6.  
  7.         where 条件
  8.  
  9.         group by field(字段) # 分组
  10.  
  11.         having       #筛选
  12.  
  13.         order by field(字段) #将结果按照后面的字段进行排序
  14.  
  15.         limit 限制条数    #将最后的结果加一个限制条数,就是说要过滤出来的数据记录的条数

2)关键字的执行优先级(重点中的重点)

from --> where -->group by -->having-->select-->distinct-->order by-->limit

步骤:

1.先到找表from 

2.拿着where 指定的约束条件,去文件/表 中取出数据

3.将取出的数据group by分组,如果没有group by,则整体为一组

4.将分组后的结果进行having过滤

5.然后执行select查询

6.去重复

7.将结果按照条件order by进行排序

8.限制结果的显示条数

聚合函数: 聚合函数聚合的是组的内容,若是没有分组,则默认一组

  1. 如: select count(*) from 表名;
  2.  
  3. select max/min/avg/sum(字段) from 表名; 计算字段中的xxx

having过滤

  1. having的语法格式和where是一模一样的,只不过having是在分组之后进行的进一步的过滤,where不能使用聚合函数,having是可以使用聚合函数的
  2. #!!!执行优先级从高到低:where > group by > having
  3. #1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
  4.  
  5. #2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,having是可以使用聚合函数

order by 查询顺序

  1. select * from 表名 order by 字段; 默认升序, ASC升序, DESC降序

限制查询的记录数 limit

# 取出工资最高的前三位的信息

  1. select * from 表名 order by salary DESC limit 3;

使用正则表达式查询

  1. #之前我们用like做模糊匹配,只有%和_,局限性比较强,所以我们说一个正则,之前我们是不是学过正则匹配,你之前学的正则表达式都可以用,正则是通用的
  2. SELECT * FROM employee WHERE name REGEXP '^ale';
  3.  
  4. SELECT * FROM employee WHERE name REGEXP 'on$';
  5.  
  6. SELECT * FROM employee WHERE name REGEXP 'm{2}';
  7.  
  8. 小结:对字符串匹配的方式
  9. WHERE name = 'egon';
  10. WHERE name LIKE 'yua%';
  11. WHERE name REGEXP 'on$';

2) 多表查询

外链接语法:

  1.   select 字段列表 from 1 inner / left / right join 2 on 1.字段=表2.字段 ;

1.交叉连接: 不适用任何匹配条件 ,生成笛卡尔积

  1. select * from 1,表2 ;

如果这样写代码,会生成笛卡尔积

笛卡尔积: 每一个字段的每一项与另外一个字段的每一项 匹配

2.内连接 :只连接匹配的行

  1. select * from 1,表2 where 1.字段=表2.字段 ;

3.外连接之左/右连接: 优先显示左表全部记录

  1. select * from left/right join 你想优先显示的表 on ....; # on的作用和where差不多

全外连接: 显示左右两个表的全部记录

(mysql 不支持全外连接)

(mysql 可以使用此种方式间接实现全外连接)

  1. select * from left join 优先显示的表 on ....union select * from right join 优先显示的表 on .... ;
  2.  
  3. #注意 union与union all的区别:union会去掉相同的纪录,因为union all是left join 和right join合并,所以有重复的记录,通过union就将重复的记录去重了

子查询

子查询其实就是将你的一个查询结果用括号括起来,这个结果也是一张表,就可以将它交给另外一个sql语句,作为它的一个查询依据来进行操作。

带in关键字的子查询

  1. select id,name from dep where id in (select dep_id from emp group by dep_id having avg(age)>25);
  2.  
  3. 总结: 子查询的思路和解决问题一样,先解决一个然后拿着这个的结果再去解决另外一个问题,连表的思路都是先将2个表关联在一起,然后进行group by 啊过滤啊操作,两者的思路是不一样的

带比较运算符的子查询

比较运算符: = ,> ,< ,>=,<=,!=等

带exists关键字的子查询

exists关字键字表示存在。在使用exists关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。True或False
    当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询。还可以写not exists,和exists的效果就是反的

day037 行记录的操作的更多相关文章

  1. 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(二) -- 多表查询

    MySQL行(记录)的操作(二) -- 多表查询 数据的准备 #建表 create table department( id int, name varchar(20) ); create table ...

  2. 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(一)

    MySQL的行(记录)的操作(一) 1. 增(insert) insert into 表名 value((字段1,字段2...); # 只能增加一行记录 insert into 表名 values(字 ...

  3. Mysql数据库的(行记录)详细操作

    在Mysql管理软件中, 可以通过sql语句中的dml语言来实现数据的操作, 包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查询数据 ...

  4. MySQL行(记录)详细操作

    一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...

  5. 巨蟒python全栈开发数据库攻略3:行记录的操作&单表查询3

    1.数据行的增删改 2.单表查询 select&where条件 3.group by&having&order by&limit

  6. MySQL行(记录)的详细操作一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理

    MySQL行(记录)的详细操作 阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操作: ...

  7. day 37 MySQL行(记录)的详细操作

    MySQL行(记录)的详细操作   阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操 ...

  8. DevExpress控件使用经验总结- GridView列表行号显示操作

    DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示一 ...

  9. Oracle 多行记录合并/连接/聚合字符串的几种方法

    怎么合并多行记录的字符串,一直是oracle新手喜欢问的SQL问题之一,关于这个问题的帖子我看过不下30个了,现在就对这个问题,进行一个总结.-什么是合并多行字符串(连接字符串)呢,例如: SQL&g ...

随机推荐

  1. MYSQL常用函数(时间和日期函数)Java中

    CURDATE()或CURRENT_DATE() 返回当前的日期 CURTIME()或CURRENT_TIME() 返回当前的时间 DATE_ADD(date,INTERVAL int keyword ...

  2. 牛客网NOIP赛前集训营-提高组(第七场)C 洞穴

    洞穴 思路: 矩阵乘法 由于只需要知道 A ^ l 的 第a行第b个元素 所以我们每次在做矩阵乘法时只需要算第a行就可以了 还要像矩阵快速幂一样预处理A ^ (1<<d) 代码: #pra ...

  3. lua --- 函数的可变参数

    主要掌握: 1>虚变量 --- 一个下划线 2>lua将函数的可变参数放在一个叫 arg 的表中,除了参数以外,arg表中还有一个域n表示参数的个数. do function fun(x, ...

  4. java ----> 类转换异常

    com.rr.domain.Department_$$_javassist_5 cannot be cast to javassist.util.proxy.Proxy 两个原因: 1.懒加载 在we ...

  5. Spring Batch Bean 校验 API 支持

    这个发布版本带来了一个新的  ValidatingItemProcessor 实现,这个实现被称为 BeanValidatingItemProcessor.能够让你使用 Bean Validation ...

  6. Confluence 6 空间

    什么是一个空间? Confluence 空间是包含有页面和博客页面的容器.你也可以将空间认为是对你工作中可以使用的 2 中类型的目录. 在 Confluence 中有下面 2 种空间类型: 站点空间( ...

  7. git 基础知识

    git 分布式版本控制系统 git三棵树: 工作目录 红色 等待添加到暂存区域 需执行git add filename 命令添加到暂存区 暂存区域 绿色 文件等待被提交 需执行 git commit ...

  8. CF1010F Tree

    真·毒瘤题 这个题面写错了一句话.要求的是每个节点的石子树>=它的两个儿子石子数的和. 首先考虑怎么算石子分配的方案. 如果对这棵树每个节点的石子数都和儿子差分一下的话,可以唯一对应一颗每个点都 ...

  9. jenkins 构建selenium python (浏览器驱动是chromedriver)的解决方法

    1.在chrome浏览去中输入chrome://version  查看chrome 的安装位置 2.将chromedriver 驱动添加到可执行文件路径中 3.在Jenkins中 的系统设置中-环境变 ...

  10. 并查集 牛客练习赛41 C抓捕盗窃犯

    题目链接 :https://ac.nowcoder.com/acm/contest/373/C 题意,初始每一个城市都有一伙盗贼,没过一个时刻盗贼就会逃窜到另一个城市,你可以在m个城市设置监察站,会逮 ...