MySQL数据库和约束与多表查询

1.卸载和安装, 卸载的时候c盘打开隐藏显示把里面的mysql卸载干净,控制面板上面卸载了,再把文件夹全删了(简单粗暴的方法),回头再安装。更改my.in文件(两处) 配环境变量。

2.数据库用到的一些代码语句

      1.创建数据库: CREATE DATABASES mydb1

                                CREATE DATABASES IF NOT EXISTS mydb2 character SET gbk;

                                CREATE DATABASES mydb3 character SET GBK COLLATE gbk_chinese_ci;

      2.查看当前数据库服务器中的数据库  show databases;

        查看以前创建的 show create database mydb2;

     3.修改:ALTER DATABASE mydb2 character SET utf8;

     4.删除 DROP DATABASE db_name;

3.DML操作 对表中的数据进行增删改的操作 INSERT UPDATE  DELETE

    (1)INSERT INTO  表名(列明1,列明2)   ...VALUES(列值1,列值2);

   个数和顺序要一一对应,不能超过列定义

     (2)UPDATE 表名 SET 列名1=列值1,列名2=列值2...where  列名=值

            eg:UPDATE student SET age=22;

      (3)删除操作 DELETE

           删除指定记录  DELETE FROM  表名 where name=‘元宝’;

          删除表中所有数据 DELETE FROM emp; (删库跑路专用)

*********************************************************************************

*************************重点************************DQL数据查询************

关键字 select

SELECT selection_list /要查询的列名称/

FROM table_list /要查询的表名称/

WHERE condition /行条件/

GROUP BY grouping_columns /对结果分组/

HAVING condition /分组后的行条件/

ORDER BY sorting_columns /对结果排序/

LIMIT offset_start, row_count /结果限定/

 

1.1.简单查询:  select * from stu;

1.2条件查询  select * from stu where gender='male' and age>10;

     用到的比较运算符,算数运算符和关系运算符 =、!=、<>、<、<=、>、>=; IN(set); IS NULL; AND OR  NOT  +-*/

1.3模糊查询   关键字LIKE  

 a._ 任意一个字符

 b.  %任意0-n个字符    ‘秦%’----》 首字为 秦

 c.select * from stu where sname like ‘____’; 四个字节

1.4字段控制查询

    (1)去除重复记录,select distinct sal from emp;

                                      select distinct sal,comm from emp;

      (2)查看两者之和, select * ,sal+comm from emp;(同类型)

                                     select * ,sal+ifnull(comm,0) from emp;

    (3)给列明添加别名  select *,sal+ifnull(comm,0)as total from emp;(可以省略as关键字)

1.5 排序

   (1)查询所有学生记录,按年龄升序排序  select * from stu order by age  asc;

   (2)降序排列                                             select *from stu order by age  desc;

1.6 聚合函数  纵向运算的函数

     (1)count: 统计指定列不为null的记录行数;select count(*)as ‘cnt’ from emp;

     (2)max: 计算最大值

        (3)min :计算最小值

     (4)sum 指定列的数值和

    (5)avg 计算指定列的平均值

1.7分组查询 group by   凡是和聚合函数同时出现的列明,一定要卸载group by之后

1.7.2 having 子句, select deptno,sum(sal) from emp group by deptno having sum(sal)> 9000;

      having和where的区别

      a.having是在分组后对数据进行过滤,w here是字分组前对数据进行过滤

     b.having 后面可以使用分组函数,where后面不可以使用分组函数。

      where是对分组前记录的条件没如果没有满足where子句的条件,那么这行不会参见分组,而having是对分组后数据的约束。

1.8limit 限制  用来限定查询结果的起始行以及总行数,select *from emp limit 0,5

总结: 查询语句书写顺序:select列from 表   where-group by-having -order by-limit

           查询语句执行顺序:from表 where-group by-having-select-order by-limit

 

一.sql语句:

         ddl数据定义语言 创建库 创建表

         dml数据操纵语言  添加删除更新  insert delete update

         dql 数据查询语言 select

         dcl 数据控制语言,用户的创建权限分配

二.dql 

条件查询 where 运算符 = != <> > >= < <= in between and and or not + - * / %

模糊查询 通配符 _表示一个字符 %表示任意多个字符

字段查询 distinct去重 合并 别名

排序 order by

聚合函数 count sun max min avg

分组查询 group by having

limit 限制查询

      

MySQL约束与多表查询

1.函数

CHARSET(str) //返回字串字符集
CONCAT (string2 [,... ]) //连接字串
INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0
LCASE (string2 ) //转换成小写
LEFT (string2 ,length ) //从string2中的左边起取length个字符
LENGTH (string ) //string长度,字节的长度
LOAD_FILE (file_name ) //从文件读取内容
LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定开始位置
LPAD (string ,length ,pad ) //重复用pad加在string开头,直到字串长度为length
LTRIM (string ) //去除前端空格
REPEAT (string2 ,count ) //重复count次
REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str
RPAD (string ,length ,pad) //在str后用pad补充,直到长度为length
RTRIM (string ) //去除后端空格
STRCMP (string1 ,string2) //逐字符比较两字串大小,
SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符,
TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符
UCASE (string2 ) //转换成大写
RIGHT(string2,length) //取string2最后length个字符
SPACE(count) //生成count个空格
注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1

数学类函数

ABS (number2 ) //绝对值
BIN (decimal_number) //十进制转二进制
CEILING (number2 ) //向上取整
CONV(number2,from_base,to_base) //进制转换
FLOOR (number2 ) //向下取整
FORMAT (number,decimal_places ) //保留小数位数
HEX (DecimalNumber) //转十六进制
POWER (number ,power ) //求指数
RAND([seed]) //随机数
ROUND (number [,decimals ]) //四舍五入,decimals为小数位数] 注:返回类型并非均为整数

日期时间类

ADDTIME (date2 ,time_interval) //将time_interval天加到date2  秒
ADDDATE('2019-04-15',2); #2天
CURRENT_DATE ( ) //当前日期
CURRENT_TIME ( ) //当前时间
CURRENT_TIMESTAMP ( ) //当前时间戳
DATE (datetime ) //返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间
DATEDIFF (date1 ,date2 ) //两个日期差
DAY (date ) //返回日期的天
DAYNAME (date ) //英文星期
DAYOFWEEK (date ) //星期(1-7) ,1为星期天
DAYOFYEAR (date ) //一年中的第几天
EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分
MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second ) //生成时间串
MONTHNAME (date ) //英文月份名
NOW ( ) //当前时间
SEC_TO_TIME (seconds ) //秒数转成时间
STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示
TIMEDIFF (datetime1 ,datetime2 ) //两个时间差
TIME_TO_SEC(time) //时间转秒数
WEEK (date_time [,start_of_week ]) //第几周
YEAR (datetime ) //年份
DAYOFMONTH(datetime) //月的第几天
HOUR(datetime) //小时

 

数据完整性

 作用:保证用户输入的数据存到数据库是符合规范的。 在表中添加约束。

1.主键约束:每个表中要有一个主键,数据唯一且不能为null;

              添加方式: a.直接在属性后面加上primary key;

                                 b.在最后加一个primary key写上属性的名字,可以写多个;

                                c.在表格写完的 ; 后面加alter table student add primary key(不推荐);

2.唯一约束:数据不能重复,可以为null    直接在属性后面添加unique

3.自动增长列:不能单独使用,一般需要和主键配合使用,给主键添加自动增长的数值,列只能是数值类型;

                          加到key 后面 auto_increment后面, 创建表格后面的括号写上 auto_increment=100; 自动增长的数字;

                         自动增长的是跟着最大的那个数加的;

4.域完整性约束:作用限制此单元格的数据正确,不对其他单元格起作用,域代表当前单元格。

多表查询

1.一对多关系: 在多的一方创建一个字段,字段作为外键指向一方的主键

2.多对多关系:需要创建第三张表,中间表至少两个字段,这两个字段分别作为外键指向各自一方的主键。

3.一对一关系:在多的一方创建一个外键指向一方的主键,将外键设置为unique和非空, 主键对应让一对一的双方的主键进行建立关系。

 

二.多表查询

  1.合并结果集 union union all

  2.连接查询  a.内连接: inner oin on  查询结果必须满足条件

                     b.外连接  outer join on   查询出的结果存在不满足条件的可能;

                    c.左外连接 left join     右外连接 right join  先查询出左表然后再查询右表不满足显示null

    3.子查询: 合并结果集 a.union 去除重复记录, select *from emp union select *from emp2;

                                         b.union all 不去重复的记录,select *from emp1 union all select *from emp2;

                  被合并的两个结果,列数必须相同,列表型可以不同。

  3.2 连接查询 求出多个表的乘机,产生笛卡尔积,一个a 后面连接所有的b 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值