mysql学习

一、 建表Tables
column: 列名称
dateType:这一列的类型(int整数类型、varchar字符串类型 varchar(20)值的最大长度是20、longtext可以存储很大数据,最多可存储4G大小、bigint用来存储更大数据的整数类型)
pk主键:这一列的值不能重复(主键的意思就是保证不能重复)如何保证不能重复呢?
AI自动增加:设置为Y
nn不为空:这一列的值是不是允许为空(Y是不允许为空)
Default: 默认值

修改表:图形界面表名右键选择Alter Table

二、操作表(增删改查)

1.想要操作数据库,首先先use这个数据库,然后执行这个语句

use 数据库名;

2.显示所有数据库的表

show tables;

注释的写法 --

-- show tables;

3.给users表增加数据 insert into 表名 (列名) values (数据);

insert into users (username, `password`, realname) values ('zhangsan','123','张三');
  • 批量插入:
insert into test_table (name, age, sex) values ('张三', 18, '男'), ('李四',16,'女'), ('王五',19,'女')
  1. 查询
  • 查询全部
select * from users;

出于性能考虑,一般情况下,避免使用*

  • 查询部分select 列名 from 表
select id, username from users;
  • 加查询条件 (后面加 where 条件)
select * from users where username='zhangsan';
  • 多个查询条件(where 条件1 and 条件2)
    (where 条件1or条件2)
select * from users where username='zhangsan' and `password`='123';
  • 模糊查询 like
select * from users where username like '%zhang%';
  • 排序 order by默认正序,加desc后是倒序
select * from users where password like '%1%' order by id desc;
  1. 更新 update 表名 setwhere 条件
update users set realname='李四' where username='lisi';

若执行update报错,则需执行下面的语句,执行完删除,重新执行刚才的update语句

SET SQL_SAFE_UPDATES = 0;

6.删除 delete from 表名 where 条件
一般删除是软删除,不会直接使用delete,而是使用update

  • 比如加一列state状态,是1的话存在,0的话删除
update users set state='0' where username='lisi';
select * from users where state='1';
  • 如果想要查询state不等于0,使用<>
select * from users where state <> '0';

三、nodejs连接数据库

  1. 下载mysql包
npm i mysql -S
  1. 引用
const mysql = require('mysql')

3.配置并连接数据库

// 创建链接对象
const con = mysql.createConnection({
  // 配置
})
// 开始连接
con.connect()

4.执行sql

const sql = `select * from users`;
con.query(sql, (err, result) => {
  if (err) {
    return
  }
  console.log(result)
})

四、工作中遇到的一些sql 关键字的意思:

as 作为(列或表的)别名(可省略)

Coalesce(A,B)相当于三目表达式,如果A不为null返回A,否则如果B不为null返回B,否则返回null

distinct去重

in查询满足指定范围内的数据

select column1, column2 from table where column1 in (value1, value2, value3)

between .... and ...:查询某个范围内的值

select * from table where column between value1 and value2

to_char(A, B)把A转成B格式的字符串

inner join ...on...

根据on的条件将两个表链接起来,当两表同时满足链接的条件,满足的部分才会列出

left join返回左表的全部行和右表满足on条件的行

// Table A是左边的表,Table B是右边的表
select * from Table A left join Table B
on Table A.id=Table B.id

right join返回右表的全部行和左表满足on条件的行

// Table A是左边的表,Table B是右边的表
select * from Table A right join Table B
on Table A.id=Table B.id

不等于 <> 或者!=

like +通配符字符串:模糊查询

mysql通配符有两个:

%:表示0个或多个字符(任意个字符)

_ : 表示一个字符

order by 子句进行排序 ,默认是升序

order by 字段名 asc(升序

order by 字段名 desc(降序

组合排序:就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推

select * from 表名 where 字段= 值 order by  字段名1 asc,字段名2 desc;

聚合函数

之前所做的查询都是横向查询,它们都是根据条件一行一行进行判断。而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值

五个聚合函数:count sum max min avg

聚合函数写在select后字段名的地方:

Select 字段名 from 表名

Select count(age) from 表名;

// 统计所有数据个数:
select count(*) from 表名;

分组查询

使用group by语句对查询信息进行分组,将分组字段结果中相同内容作为一组;

Select 字段1,字段2 from 表名 group by 分组字段 having 条件;

Select * from 表名 group by sex;
  • 这句话会将sex相同的数据作为一组,但是会返回每组的第一条,没有任何意义;

  • 分组的目的就是为了统计,一般分组查询会跟聚合函数一起搭配使用;

  • 分组后聚合函数不是操作所有数据,而是操作一组数据。

select sum(score), sex from 表名 group by sex;

注意:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪个组的

where是分组前的条件,分组后的过滤条件使用having;

Select count(*), sex from hero where age < 30 group by sex having count(*) > 2;

having和where的区别:

  • having在分组后对数据进行过滤
  • where是在分组前对数据进行过滤
  • having后面可以使用聚合函数
  • where后面不可以使用聚合函数

limit:限制查询记录的条数 limit offset, length 或者 limit length(只适用第一页);

offset指的是偏移量,可以认为是跳过的记录数量,默认为0

length是指需要显示的总记录数

 select 字段列表 [as 别名] from 表名 [where子句] [group by子句] [having子句] [order by子句] [limit子句];

case when ... then ... else ... End
case when 条件A then A when条件B then B when条件C then C else D end相当于if else语句

select name,  (case when score < 60 then 'fail' when score >=60 and score < 80 then 'pass' else 'fine' end) as grade from table

sql中除了数值类型,其他字段类型的值必须使用引号引起,建议单引号
desc 表名:查看表结构
子查询就是在主select 里面套select from, 相当于从一个结果集里面去查询。子查询一般都写在括号里面,然后在括号外面用as接收这个子查询出来的值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容