首页 > 数据库 >MYSQL基础语法-cnblog

MYSQL基础语法-cnblog

时间:2023-08-29 09:12:17浏览次数:44  
标签:-- 数据库 查询 语法 MYSQL table where cnblog select

MY SQL 基础语法

image-20230224101317435

基础语法:

1.创建数据库:

creat database ***;(数据库名称自定义)

2.使用数据库:

use ***;(已经创建好的数据库名称)

3.描述表的结构:

desc **(表字段成员)

4.显示表格:

show tables;

5.查询当前数据库:

select database();

6.重命名文件:

select --as(as可省略)--(中文用单引号引用)from--;

6.查看当前表:

show creat table+表的名字(table namer)

7.数据处理函数

(这些函数在其他数据库里可能不存在)

image-20210726094720441

image-20210726095719543

select lower(--)from--;//表示转小写,仅将数据转化成小写,数据库底层数据没变

image-20210726095024449

image-20210726100001871

8.去重复性(distinct):

去除重复性distinct(只能 出现所有关键字最前方,即它前面不能出现字段名称)

image-20210726230452651

9.合并查询结果(union)

要求:多个结果的字段个数要相同,数据类型可以不同(oracle不允许此操作)

image-20210727232532874


10.获取表中部分数据(limit)

只在MYSQL数据库中存在,不建议使用

image-20210727233540525

10.退出mysql:

\q ctrl+c quit exit

11.一个完整的DQL语句总结:

image-20210726235335231

查询语句:

1.简单查询:

select--from---

(查询一个字段)

select--,--,--from--

(查询多个字段信息,用“ ,”隔开)

select * from--;

(“*”查询所有字段)

2.条件查询:

select --from-- where--

(where后跟查询条件)

image-20210725234237381

where后面的天健语句可以跟“or","and","between...and...","like"模糊查询等条件

模糊查询:。。。。like '%模糊语句%'

3.分组查询

分组查询一般搭配与聚合函数使用,注意所有null值都不参与聚合函数运算,分组之后查询其他字段是没有意义的

image-20230224153452796

—group by--;

(通过哪个或者哪些字段进行分组)

如果一条DQL语句当中有group by句子,那么select关键字后面只能跟参与分组的字段和分组函数。

image-20210726232624904

image-20210726232908386

执行顺序:where>聚合函数>having,因此where后面不能跟聚合函数,having后面可以跟聚合函数

!!!分组函数(count sum avg max min)不能使用在where后面

分组函数需要分完组之后执行,但是现实情况group by在where 后面执行,即where后面跟的分组函数在group by分组之前执行,为错误执行语句。

—having

having功能与where功能都是为了完成数据过滤

having与where后面都是添加条件

where在group by之前完成过滤

having在group by之后完成过滤

eg:

select job,avg(sal)from emp where avg(sal)>1500 group by jop;//错误写法,分组函数不能跟在where后面

select job,avg(sal)from emp roup by jop having avg(sal)>1500;//正确写法

为了提高效率,一般是先过滤,再分组,即优先考虑where,where不能用再用having

4.连接查询

(多表联合,跨表查询)

如果两张表在连接的时候没有经过任何限制,最后查询结果会是两张表记录条数乘积,这种现象被称作笛卡尔积现象为了避免此现象发生,两个表连接查询时需要添加条件

左(右)连接可以写成右(左)连接,若存在right或left,一定外连接,否则是内连接。outter可以省略

注意:虽然连接查询使用限制条件,但是匹配次数没有减少

—内连接

(要求输出a表和b表相配的数据时使用,相当于查询两个表的交集部分)

*等值连接

image-20210727165652812

*非等值连接

inner 可以省略

*自连接

(一张表看成两张表,进行连接,实际上显示的是两个表的交集)

image-20210727221914462

—外连接

(除了要求输出a表和b表相匹配的数据之外,还要无条件输出a表或者b表所有数据,对方表没有匹配的记录,会自动模拟出null与之匹配)

*左外连接

(将左表数据全部显现出来)

image-20210727224117611

*右外连接

(将右表数据全部显现出来)

—全连接(很少用)
多张表连接原理:

5.子查询

(select 语句嵌套select语句)

select...(select)

select e.ename,(select d.dname from dept d where e.deptno=d.deptno) as dname from emp e;

from...(select)

将查询结果当做临时表eg:

select * from emp where dep_id in (select did from dept where dname='财务部' or dname='市场部');

image-20210727231334004

where...(select)

eg:select ename,sal from emp where sal>(select avg(sal)from emp);

6.分页查询

select 字段列表,from 表名 limit 起始索引 ,查询条目数

eg:

select * from stu limit 0,3;

从索引0开始查询,查询三条数据

排序语句:

1.升序排序:

select--(a2)from--(a1)order by --(a3)asc;//表示在字段a1中将a2按照a3升序的顺序排列,默认为升序,即asc可以省略。

2.降序排列:

select--,--from—order by --desc

image-20210726092702003

select--,--from—order by --(a1)desc,--(a2)asc;//表示首先按照a1降序排列,如果a1的值相同,z1相同的几个值再按照a2升序排列

image-20210726093313857

日期数据处理 :

回顾Java日期类型:

SimpleDataFormat sdf=new SimpleDateFormat("yyyy-mm-dd");

Date data=sdf.parse("2000-04-10");

MYSQL 的日期格式:

%Y 年,%m月,%d日,%H时,%i分,%s秒

获取当前时间 -now();

1.-str_to_data();

//通常使用在插入操作中字段是date类型,不接受字符串varchar类型,需要先通过函数将varchar变成date再插入数据才能成功。

如果字符串格式为"200-04-10",符合“%y-%m-%d”格式,自动将字符串格式转化为日期数据

如果字符串格式为"04-10-2000",需要使用-str_to_data(将日期字符串转换成日期data类型)

image-20210726211416625

2.date_format();

(“日期类型数据”,“日期格式”)

image-20210726213139657

表:

对表的操作

表的创建:

image-20210728114225999

default"--";//表示在创建表格的时候设置默认值

eg:sex char(1) default "m";

表中常见数据类型:

image-20230224104810243

表的删除(drop):

drop table t_student;(如果数据库中没有这样的表格,这种方式删除会报错)

drop table if exists t_student ;(最好用这种,此种方法是MYSQL数据库特有)

表的插入(inser into):

INSERT INTO tablename (columnname1,columnname2...)value(value1,value2...);

字段和值一一对应(个数相同,数据类型一致);

eg: insert into emp select *from emp2 where sal=300;//将查询结果当做表插入

表的复制(as):

creat table --as--;

eg:creat table emp1 as select * emp;//复制表emp全部数据给emp1

​ creat table emp1 as select empname,empno from emp;//复制表emp部分数据给emp1

对表的字段操作

表中字段的添加(add):

alted table --表名add --字段名 数据类型(数据长度);

eg:alted table t_student add tel varchar(10);

表中字段的修改(modify):

alted table --表名modify --字段名 数据类型(数据长度);

eg:alted table t_student modify tel varchar(20);

表中字段删除(drop):

alted table --表名drop--字段名 数据类型(数据长度);

eg:alted table t_student drop tel varchar(20);

对表的数据处理(dml语句)

表数据增加:

与前面对表的操作一致

表数据修改:

update table set 字段名=字段值,字段名=字段值...where..

//如果没有where条件,将会全部更新表中所有数据

表数据删除:

delete from tablename where 条件;

约束

constraint,实际上 就是表中数据的限制条件,加入约束的目的就是为了保证表中数据的完整和有效

image-20230224161932517

非空约束(not null)

-> cerat table t_user(
-> id int(10),
-> name varchar(10) not null,
-> email varchar(128)
-> );

表示字段不能为空,且not null与unique 可以联合使用

唯一性约束(unique)

image-20210729001221415

字段唯一性,不能有重复可以为null

email varchar(128) unique 此为列级约束,多个字段约束可以用此种方法

email varchar(128),

unique(email);//此为表级约束 ,可以给表级约束起名字,方便以后删除此约束

construction newtablename unique(tablename);//给约束起新名字

unique(email,name)//此为email和name联合结果的唯一性

主键约束(primary key)

主键约束

添加primary key之后,该字段唯一且不能为空,并且默认添加“索引-index”

image-20210729010214744

image-20210729010358989

主键字段

(表中的某个字段添加主键约束之后,该字段被称为主键字段一张表只能有一个主键)

image-20210729005344593

image-20210729005905548

image-20210729010724202

主键值

(主键字段中每一个数据被称为主键值)

外键约束(foreign key)

constraint 外键名称 foreign key (外键列名) references 主表(主表列名)

外键约束
--部门表
create table dept(
id int primary key,
dep_name varchar(20),
addr varchar(20)
);
-- --员工表
create table emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键,dep_id关联dep里的id
constraint fk_emp_dept foreign key (dep_id) references dept(id)
);

eg:

image-20210729012124091

外键字段去引用一张表的字段的时候,被引用的字段必须具有unique约束;

image-20210729012842702

外键字段

(表中的某个字段添加外键约束之后,该字段被称为外键字段一张表可以有多个外键)

外键值

(外键字段中每一个数据被称为外键值)

检查约束

(目前MYSQL不支持,oracle数据库支持)

数据库设计

有哪些表,表里有哪些字段,表和表有什么关系

数据库设计的步骤

1.需求分析(数据是什么?数据具有哪些属性?数据与属性的特点是什么)
2.逻辑分析(通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数库管理系统)

3.物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)
4.维护设计(1.对新的需求进行建表;2.表优化)

表与表之间的关系:

一对多

多对多

一对一

1.一对多实现方式
在多的一方建立外键关联一的一方主键
2.多对多实现方式
建立第三张中间表
中间表至少包含2个外键,分别关联双方主键
3.一对一实现方式
在任意一方建立外键,关联对方主键,并设置外键唯一

事务

事务简介

  • ·数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令
  • 事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败
  • ·事务是一个不可分割的工作逻辑单元

举例:

如张三向李四转账五百元,

事件一:张三账户减去五百元,

事件二:李四账户增加五百元

事务的作用就是保证事件一与事件二同时成功或者同时失败

否则业务将会出现严重的后果,如多出五百块或少了五百块。

事务操作

update account set money=1000;
-- 开启事务
begin;
update account set money=money-500 where name='张三';
update account set money=money+500 where name='李四';
-- 提交事务,对数据库数据更改,数据持久化
commit;
-- 若出错回滚,不会更改数据库的数据
rollback;

事务四大特征:

  • ·原子性(Atomicity):事务是不可分割的最小操作单位,要么同时成功,要么同时失败·一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态
  • ·隔离性(Isolation):多个事务之间,操作的可见性
  • ·持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

标签:--,数据库,查询,语法,MYSQL,table,where,cnblog,select
From: https://www.cnblogs.com/tanzhenfei/p/17663832.html

相关文章

  • 再遇 MySQL “一招必杀” Bug
    TL;DR该Bug与DerivedConditionPushdownOptimization相关,从MySQL8.0.26引入,8.0.27和8.0.28仍受影响,直到MySQL8.0.29被修复。但是,MySQL8.0.29有其他致命缺陷,官网已经移除下载链接,建议升级到新版本MySQL8.0.33或MySQL8.0.34。问题现象该问题是vx群里的好......
  • QT连接MySql关于驱动问题
    今天分享一下在qt中连接数据库遇到的一些问题,主要是mysql驱动以及mysql动态库加载1.环境变量配置一下mysql和QT的环境变量,这个比较简单,各位自行百度。2.编译mysql驱动用QT打开mysql.pro文件,在第六行首加上#,然后在末尾加入:win32:LIBS+=-LD:/MySql/mysql-8.1.0-winx64/lib-l......
  • 数据库MySQL
     Concat(a,b)连接a,b两个字段                                    MySQL函数       分组之后再插入查询条件不能用Where关键字,而要用HA......
  • MySQL 分析查询与来源机器
    当前分析针对版本:MariaDB10.5线上出现报错:can'tcreatemorethanmax_prepared_stmt_countstatements。造成这个错误的直接原因就是同时开启了prepare句柄太多导致的,所以比较直接的方式是调大参数,首先查看设置的值:showglobalvariableslike'max_prepared_stmt_count';......
  • Arch中使用Qt6的QtSql出现mysql driver not loaded的解决记录
    查阅了网上的说法,出现这个错误的原因大致可能有以下几种:Qt和mysql的位数不一样,一个是32位的,一个是64位的Qt中自带的驱动库与所使用的版本不匹配代码写错了,比如"QMYSQL"写成了"MYSQL"我出现个问题的原因是第二种。参考了一位老哥的博客QTMacM1解决mysqldrivernotloade......
  • MySQL的连接和导出数据分析和lift曲线
    MySQL的连接和使用https://www.cnblogs.com/zdstudy/p/16567399.htmlmysql使用网址https://blog.csdn.net/LikiLyn/article/details/120385981多个文件mergeimportpandasaspdimportnumpyasnpimportpymysql#%%打开数据库连接conn=pymysql.connect(host='地址',user......
  • mysql日志追踪 / 数据恢复
    1.查看日志开启状态showvariableslike'log_%';2.查看日志文件列表showbinarylogs;或者showmasterlogs;3.查看当前日志index位置showmasterstatus;4.查看binlog关键事件showbinlogevents[IN'log_name'][FROMpos][LIMIT[offset,]row_c......
  • MySQL online DDl原理
    onlineDDL从5.6开始,不阻塞DML但是会阻塞所有的DDL,online有三种模式:INSTANT(8.0.12),INPLACE(rebuild),INPLACE(no-rebuild),具体操作如下:1、只修改表的元数据信息删除二级索引修改索引名(5.7)修改字段名设置(删除)字段的默认值增加varchar长度,如果表示字符串长度的字节数变化则会使用c......
  • SQL的语法知识
     1.全表查询  示例:select*from表名2.选择查询 选择特定的列或者字段示例:selectname,age表名3.查询别名 {原始字段名}as{别名}示例:selectnameas'学生姓名' 表名4.查询常量和运算  加减乘除、取平均值、连接文本等示例:selectname,score,score/2......
  • ASN.1抽象语法标记1
    ASN.1编码berASN.1(抽象语法表示法一)ASN.1(抽象语法表示法一)是一种正式但灵活的表示法,允许您指定高级电信协议中使用的抽象对象。您可以使用整数和位字符串等简单类型以及集合和序列等结构化类型来构建复杂类型的定义。基本编码规则 (BER)BER 描述了如何将每种 ASN.1 类型的......