初始mysql与sql语句

文章介绍了如何安装和启动MySQL,通过phpstudy配置环境。讲解了MySQL的基本命令,如使用数据库、创建数据库、显示数据库列表以及退出命令。接着讨论了SQL语句的分类,如DQL、DML、DDL和TCL,以及一些基本的查询和数据操作。文章还提到了表的概念,字段的属性,以及如何进行条件查询、模糊查询和排序。此外,还介绍了数据处理函数和分组函数的使用。

首先得安装好MySQL——推荐安装phpstudy来配置环境,万一~万一以后要学php捏

进入自己的MySQL

我的是安装在D盘里的,然后通过Phpstudy配置下载的,所以我的mysql就在phpstudy的配置文件夹中:给出我的mysql命令行启动指令

 注意:如图中所示,第一次cd到文件所在位置只能到bin文件夹,不能够直接到运行程序,也就是.exe后缀的文件,显示到第四行这种状态时再输入mysql.exe -uroot -proot (意思是运行mysql.exe文件,用户名root,密码root)即可启动mysql

如果不输入-p后面的内容会进行密文输入,即对密码隐藏,系统会继续要求您输入密码,此刻显示为密文

MySQL数据库指令

接下来的各种指令除了exit一定记得加分号,指令字母不区分大小写

  • 使用某个名字的数据库:mysql>use mysql_name;
  • 创建某个名字的数据库:mysql>create database mysql_name;
  • 显示MySQL中所有的数据库:mysql>show database;
  • 退出mysql:mysql>exit 或者  mysql>quit
  • 查看数据库版本:mysql>select version();
  • 查看当前使用的哪个数据库:mysql>select database();

注意:mysql命令行中的命令不见分号不会往下执行或者输入\c强行终止输入

数据库中最基本的单元:table

什么是表?为什么用表来存储数据呢?

因为表比较直观,任何一张表都有行和列:

行 row:被称为数据/记录

列 column :被称为字段

每一个字段都有:字段名、数据类型、约束等属性

数据类型:字符串,数字,日期等

约束:约束也有很多,其中一个叫做唯一性约束这种约束添加之后,该字段的数据不能重复

查看数据库下有那些表show tables;

SQL语句

分类

SQL语句与很多,最好分门别类记忆

  • DQL:数据查询语言(凡是带有select关键字的都是查询语句)select...
  • DML:数据操作语言(凡是对表中的数据进行增删改的都是DML)

insert delete update

insert 增 delete删 update改

  • DDL:数据定义语言(凡是带有create、drop、alter

DDL主要操作的是表的结构,不是表中的数据

create:新建,等同于增

drop:删除 alter:修改

这个增删改和DML不同,这个主要是对表结构进行操作

  • TCL:事务控制语言

包括:事务提交:commit;事务回滚:rollback;

  • DCL:数据控制语言

例如:授权grant、撤销权限revoke

此篇主讲的是作者目前所学到的DQL查询语句知识

最基础的查询语句:

  • 怎么查一个表中数据:select * from 表名;(*代表所有)
  • 怎么只查表的结构而不查数据:desc 表名;

(先瞅一眼结构再写SQL语句)

  • 查询一个字段?select 字段名 from 表名;

其中select和from都是关键字,字段名和表名都是标识符

  • 查询两个字段或者多个字段:使用逗号隔开
  • 查询所有字段:1.把每个字段都写上   2.用   *  号(因为它可读差,效率低,实际开发中少用)
  • 给查询的列起别名:mysql>select a,b as c from 表名;

a的名字不会变,只会改变b显示出的名字,不会实际改变名字

as可以用空格代替,起别名的时候别名里不能有空格或者

可以将别名加上单引号或双引号

  • 字段可以使用数学表达式,可以参与数学运算,显示的时候可以起别名,别名为中文时要用单引号括起来

条件查询

查null需要写is null

查非null写is not null

多个条件同时查询可以添加括号提高优先级

(and和or同时出现时,and优先级比较高)(开发中不确定优先级加小括号就行了)

in不是一个区间,in后面跟的是具体的值,只找具体的值,不是范围

模糊查询

用百分号%代表任意多个字符,用下划线_代表任意一个字符

找出名字中含有下划线的~这个比较特殊,因为本身可以用下划线表示一个字符,但我们要查这个字符的话就需要改变它原本的意义,即用转义字符 ' \ '  写成 '%\_%'

按顺序查询:

select a,b from c order by d  (desc);

在c表中查a,b列,按照d升序(默认为升序或者写asc表示升序)(desc降序)的方式查询

可以多字段排序吗?select a,b from c order by d asc,f asc;

在上面的基础上,先按d升序排,d相同的话按f升序排

从左到右优先级降低,多个字段间用逗号隔开

d,f均为表中的字段(列)

<了解>根据字段的位置也可以排序

select a,b from c order by 2;

按照查询结果的第2列排序,不建议在开发中这样写,因为列的顺序很容易发生改变,列顺序修改之后2就废了

综合条件写法:关键字顺序不能变

 

以上语句的执行顺序必须掌握,

第一步from

第二步where

第三步select

第四步order by(排序总在最后)

 单表数据查询时常用函数

  • 数据处理函数又称为单行处理函数

单行处理函数的特点:一个输入对应一个输出

多行处理函数特点:多个输入对应一个输出

 

函数名后面加字段(列)select lower(a) from c;

从c表中找出a字段并转化为小写

转化完后名字不好看同样可以后跟as起别名

这是14个输入,最后得到14个输出

  • concat函数进行字符串拼接,按顺序接concat(a,b,...)

首字母大写,多函数嵌套:

 

select后面如果没跟字段,跟的是字面量或者字面值-->数据,那么mysql会根据表的结构显示一列相同的字面量 

四舍五入函数round(a,b)表示输入数据,b表示要保留的小数位数

b为负数则向整数位保留,-1表示保留到十位,-2表示保留到百位...

      

 

rand用于生成0到1之间的随机数  rand()

ifnull可以将null转换成一个具体值

ifnull是空处理函数,专门处理空的

在所有数据库当中,只要有Null参与的数学运算,最终结果就是NULL,为了避免这个现象,需要使用ifnull函数

ifnull用法:ifnull(字段,被当作的值)

如果字段数据为NULL的时候,把这个数据当作这个值

(case 字段 when .. then .. when .. then .. else .. end )

 

 分组函数(多行处理函数)

count记数  sum求和 avg平均值 max/min最大最小值

注意:分组函数在使用的时候必须先进行分组,然后才能用,如果没有对数据进行分组,那么默认整张表为一组

注意:

  1. 分组函数自动忽略NULL,不需要提前对NULL进行处理,count也会忽略NULL,只会统计非NULL数据个数
  2. 分组函数中count(*)和count(具体字段)有什么区别?                                        count(具体字段):表示统计该字段下所有不为NULL元素的总数                                      count(*):数据库表中不会出现每个字段都为NULL的所以count(*)统计的就是表的总行数,该行有某一个字段有有效数据,该行才会存在。有一行数据就count++
  3. 分组函数不能够直接使用在where子句中。                                                                      原因是分组函数要在分组之后才能运行,而分组操作group by是在where之后操作,也就是说执行了where然后再执行分组函数,但此时还没分组,分组函数执行不了
  4. 所有的分组函数可以组合起来一起用

分组查询

在实际的应用中,可能需要先进行分组,然后对每一组的数据进行操作。这时候需要我们使用分组查询。

 

执行顺序1.from  2.where 3.group by 4.select 5.order by

group by不写的话默认整张表为一组

重点结论:

加别的字段在mysql中不会报错,但额外添加的字段显示会毫无逻辑,而在oracle中会直接报错

group by后面可以加多个字段,从而select后面也能跟上同样的字段和分组函数,优先级按group by后面的从高到低

使用having增加附加条件(执行顺序在group by之后select之前)效率太低

优化策略:where和having优先使用where,优先选择where,where实在完成不了再选择having

 

去除重复记录:

原表数据不会改变,只是查询结果去重

去重需要使用一个关键字:distinct

 

 

联合去重:选取的多个字段均相同才会被去除

可以select count(distinct(a))

表示a中去除重复元素后的个数

可以用于统计员工表中工作岗位的个数

多表查询+子查询等待后续~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值