Mysql查询语句进阶知识集锦

前言

上次咱们简单的学习了一下select的用法,一篇文章教会你进行Mysql数据库和数据表的基本操作,对数据库大概有了一些基本的了解。

咱们接着上次继续来看叭!

查询

数据如下

or查询

我们在上学时,会听到这样的话,某某某,你把谁谁谁或者谁谁谁叫过来。

这样子的话,我们我们要查询的,就是一个或(or)的关系了。

or查询只有满足一个条件即可

sql

-- 语法
SELECT * from student WHERE <条件> or <条件> ...;
-- 例如,查询姓名为张三的或者姓名为小刘的数据
SELECT * from student WHERE name="张三" or name="小刘";

执行结果

不等于(!=)查询

上述我们查询的,都是等于(=)操作,但是我们在上学时,还会有这种情况。

某个学生学习可好,背东西背的可快,放学的时候可能就人家一个人过了,这时候老师可能就说

除了某某某,其他学生本篇文章全部抄3遍,淦。。。

所以这时候就是反过来的查询的,只需要排除某个人即可!

sql

-- 语法
SELECT * from student WHERE <条件>;
-- 例如,查询姓名不是张三的其他人,排除张三
SELECT * from student WHERE name!="张三";

执行结果

in/not in查询

学生们还都是年轻人,年龄大概都在20来岁,这时候老师说,班长,把年龄在19,20,21的人统计一下!

根据上述我们学过的知识,可能你是这样婶的。

SELECT * from student WHERE age=19 or age=20 or age=21;

执行结果

通过三个or找到,其实这样也没错,但是还有一种更简单的。

sql

-- 语法
SELECT * from student WHERE <列名> in (值1,值2,...) ...;
-- 例如,需求同上
SELECT * from student WHERE age in (19,20,21);

执行结果

not in 就是不在这个范围的数据啦!

sql

-- 查询年龄不在19,20,21范围的数据
SELECT * from student WHERE age not in (19,20,21);

执行结果

between查询

between适合进行范围查询!

sql

-- 语法
select * fromwhere <列> between <开始范围> and <结束范围>;
-- 例如,查询年龄时20-22岁的学生
SELECT * from student WHERE age BETWEEN 20 and 22;

执行结果

同理,between还能用在时间上。

select * from <表名> where <时间列> between <开始时间> and <结束时间>

模糊查询(like)

假设现在数据如下,有三个姓张的。

老师可能突然有一天对你说,班长,把咱们姓张的列出来,我找他们谈点事,咋办???

我们只需要找,是以张开头的,后面是啥无所谓。

所以就要用到like模糊查询。

sql

-- 语法 %表示匹配一个或多个字符
select * fromwhere <列> like '[%]<字符串>[%]'
-- 例如,查询,以张开头的
SELECT * from student WHERE name like "张%";

执行结果

同理,这个%可以放在任意位置,他就是充当不确定的字符使用的,能够自动匹配一个或多个

例如

... WHERE name like "张%丰";
匹配:张三丰
WHERE name like "%鱼";
匹配:张甲鱼
WHERE name like "李%";
匹配:李四
...

限制(limit)

限制这个有点怪异,还是图片举例比较好。

数据如下

sql

-- 前两行
SELECT * from student LIMIT 2;

-- 从第2行开始后,再取4行
SELECT * from student LIMIT 2,4;
-- 同上,写法不同
SELECT * from student LIMIT 4 OFFSET 2

排序(order by)

不知道你有没有发现,我们之前查找的顺序都是正向的。

但是会有个问题,我们新增的数据,其实id是最大的,理论来说,应该要排在最前面。

所以,应该是倒序的是最好的。

sql

-- 语法
select * from <表名> order by <列> asc -- 从小到大排序
select * from <表名> order by <列> desc -- 从大到小排序
select * from <表名> order by <列1> desc,<列2> asc -- 先根据 列1 排序,如果数据相同,按照 列2 排序

例如

根据id正向排序

SELECT * from student ORDER BY id ASC;

执行结果

根据id反向排序

SELECT * from student ORDER BY id desc;

执行结果

hhh,这样我们就把数据反过来了!!!

分组(groupby)

分组,这个可能是难为了一批人,其实分组的核心,在于理解这个压缩这个概念。

假设数据如下

性别有男有女,如果我想知道,男的有多少个,女的有多少个怎么办???我总不能数吧。。。

所以这时候,如果能吧,男的都拿出来,女的都拿出来,就像这样!

然后我对拿出来进行压缩成一条。

如果这个你懂了,那分组就懂了。

语法

SELECT <列>,COUNT(<列>) from student GROUP BY <列>;
-- 因为分组了某个列,所以就不能再展示其他列的信息了,因为压在一块了,显示不了
-- 但是可以通过count,sum等函数计算压缩的个数,或者总值

例如

统计男女各多少人

SELECT gender,COUNT(gender) from student GROUP BY gender;

执行结果

统计同一年龄多少人

SELECT age,COUNT(age) as "数量" from student GROUP BY age;

执行结果

注意:group by必须在where之后,order by之前。

总结

本篇主要讲述的是Mysql查询语法,再单表查询中,基本上就上述这么些的内容,但是从理论到事件,是需要时间的。

一定要勤加练习,什么是or查询,like查询注意事项,尤其是group by分组查询,一定要多多思考和联系。

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。

不要轻易改变自己,因为你可能就是世界上那颗未加工的最亮的钻石。

我是码农星期八,如果觉得还不错,记得动手点赞一下哈。

感谢你的观看。

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。

安利一款神奇——教你轻松下载百度网盘超大文件

前言

玩过百度网盘的都应该清楚它的强大,小编就是靠着百度网盘那强大的功能以及变态的存储空间才获得许多具有纪念价值的东西,比如某些Hacker资料,你懂的。

但是小编一直以来都有一个心结未解开,那就是为毛每次使用百度网盘下载文件的时候就非得下载百度网盘客户端才可以了,估计先不说浪费时间和占用电脑资源,至少小编也是不乐意这样做的,毕竟小编电脑可是只有60个G的存储空间了。

那么,我们该怎么样处理这个问题呢?简而言之就是如何在不下载客户端的情况下就可以下载这个大型的文件了,一起往下看看。

一、坑爹的下载制度

先来回顾下这个坑爹的画面:

看到这里小编尴尬癌都犯了,本想下载个黑客工具玩玩,过过瘾,奈何是这个样子,正巧不巧的自己的电脑又出了点意外,无法安装百度云客户端,目前还无法找出根本原因;但是小编是那么轻易认输的人吗?当然不是,于是乎,小编便找到了这么个神器,浏览器的一个脚本—-一般圈内人都叫它们油猴。

二、油猴脚本

油猴(Tampermonkey),这哥们我相信只要是玩过Google浏览器的同志都不会太陌生,它有着丰富的脚本资源,因而可以满足我们平时的网络需求,但是请注意,油猴脚本只能作用在Chromeium内核的浏览器上哦,小编所使用的360浏览器就是其中之一,其它的像什么QQ浏览器,UC浏览器等都是,随意选择一种即可;IE浏览器不是哦。

三、安装脚本

这里我们以360浏览器为主进行讲解,首先需要进入扩展管理界面,要想进入就得先点击管理图标,如下:

就是这个田子型的图标,点击它即可进入,然后我们点击加号按钮就可以进入扩展管理界面,如下:

这里我们在红色箭头处输入:‘tampermonkey’“,然后点击安装即可。安装成功是这个样子的,如图:

四、选择脚本库

虽然我们已经安装了油猴脚本,但是并不表示现在就可以随心所欲下载资源,进行各种骚操作了,我们还需要下载另一个脚本资源。不过在下载脚本资源之前,我们需要在某个库中查找,因为这些脚本资源目前都集中在库中,目前来说最出名的就是”GreasyFork “和”OpenUserJS “。小编选择的是”GreasyFork “,不因为别的,只是觉得这个网站的布局风格我很喜欢,于是果断选择了它,如图:

五、安装附加脚本

既然我们已经找到最合适的库了,那么接下来就是安装附加的脚本了,这里我们需要下载一个脚本,名为”网盘助手“,选择最新版本的网盘助手,如图:

点击进去,然后进行下载,如图:

这里我们可以在油猴的界面去查看当前下载的脚本的状态,如图:

可以看到,这里小编下载了两个脚本。

六、下载文件它就是解除

接下来就是最重要的时刻,做了那么多还不就是为下载文件做铺垫吗?那么我们该怎么做了?首先小编要说明的一点就是,你必须先把这个要下载的文件保存到百度网盘中才可以 ,那么废话不多说,保存我想大家都会,那就看网盘里有啥资源吧,我们随便选择一个资源,如图:

可以看到,选择了之后就会出现一些其它的选项,我们选择生成链接,然后会出现一个链接,如图:

我们点击这个链接,如图:

这样就弹出了下载链接了,我们选择好下载路径后直接点击下载,如图:

静静等待下载,一切大功告成。

七、总结

其实,像这样的神器在油猴中还有许多,这只是其中的一个而已,油猴上有很多优秀的脚本,好用到哭。

说说Python集合的那些事儿

大家好,我是IT共享者,人称皮皮。今天给大家来捋一捋Python集合。

一、什么是集合?

集合(set)和字典(dict)类似,它是一组 key 的集合,但不存储 value。集合的特性就是:key 不能重复。

二、集合常用操作

1. 创建集合

set 的创建可以使用 {} 也可以使用 set 函数:

s1 = {'a', 'b', 'c', 'a', 'd', 'b'}  # 使用 {}
print(s1)
(['a', 'c', 'b', 'd'])

s2 = set('helloworld')  # 使用 set(),接收一个字符串
print(s2)
set(['e', 'd', 'h', 'l', 'o', 'r', 'w'])
s3 = set(['.mp3', '.mp4', '.rmvb', '.mkv', '.mp3'])  # 使用 set(),接收一个列表
print(s3)
set(['.mp3', '.mkv', '.rmvb', '.mp4'])

说说Python集合的那些事儿

2. 遍历集合

s = {'a', 'b', 'c', 'a', 'd', 'b'}
for e in s:
    print(e)

说说Python集合的那些事儿

3. 添加元素

add() 方法可以将元素添加到 set 中,可以重复添加,但没有效果。

s = {'a', 'b', 'c', 'a', 'd', 'b'}
print(s)
set(['a', 'c', 'b', 'd'])
s.add('e')
print(s)
set(['a', 'c', 'b', 'e', 'd'])
s.add('a')
print(s)
set(['a', 'c', 'b', 'e', 'd'])
s.add(4)
print(s)
set(['a', 'c', 'b', 4, 'd', 'e'])

说说Python集合的那些事儿

4. 删除元素

remove() 方法可以删除集合中的元素, 但是删除不存在的元素,会抛出 KeyError,可改用 discard()

例子:

s = {'a', 'b', 'c', 'a', 'd', 'b'}
print(s)
set(['a', 'c', 'b', 'd'])
s.remove('a')  # 删除元素 'a'
print(s)
set(['c', 'b', 'd'])
s.remove('e')  # 删除不存在的元素,会抛出 KeyError

说说Python集合的那些事儿

s = {'a', 'b', 'c', 'a', 'd', 'b'}
print(s)
set(['a', 'c', 'b', 'd'])
s.remove('a')  # 删除元素 'a'
print(s)
set(['c', 'b', 'd'])
s.discard('e')  # 删除不存在的元素, 不会抛出 KeyError

说说Python集合的那些事儿

三、交集/并集/差集

Python 中的集合也可以看成是数学意义上的无序和无重复元素的集合,因此,我们可以对两个集合作交集、并集等。

看看例子:

s1 = {1, 2, 3, 4, 5, 6}
s2 = {3, 6, 9, 10, 12}
s3 = {2, 3, 4}
print(s1 & s2 ) # 交集
set([3, 6])
print(s1 | s2)  # 并集
set([1, 2, 3, 4, 5, 6, 9, 10, 12])
print(s1 - s2)  # 差集
set([1, 2, 4, 5])
print(s3.issubset(s1))  # s3 是否是 s1 的子集

print(s3.issubset(s2))  # s3 是否是 s2 的子集

print(s1.issuperset(s3))  # s1 是否是 s3 的超集

print(s1.issuperset(s2))  # s1 是否是 s2 的超集

说说Python集合的那些事儿

四、总结

本文主要介绍了Python的另外一种形式(集合),通过讲解集合中如何去创建集合,遍历集合,解释了两种常见的集合操作,添加元素和删除元素。最后通过一个小项目,介绍了集合之间中的三种关系。希望能够帮助大家更好的学习。

一篇文章教会你进行Mysql数据库和数据表的基本操作

通常情况下,我们都是通过mysql.exe(客户端),连接mysql服务的。

但是有个问题。

  • 第一个问题就是太丑了。
  • 第二个问题是因为这不会自动提示啊…,早都习惯了各种自动提示工具,在用这么Low的

安装

下一步下一步就可以了!!!

破解

管理员运行PatchNavicat

打开之后,游览到安装Navicat for MySQL的目录,完成即可。

新建查询

连接好之后,点击查询,再点击新建查询,就可以写SQL了。

关于Mysql的一些概念理解

需要先理清一个概念,Mysql不是数据库。

我们连接的是Mysql服务,不是数据库

所以当别人听到连接数据库时,其实指的是连接跑起来的Mysql服务。

数据库的理解

数据库可以理解为文件夹

通过show DATABASES;命令查看自己下面有哪些数据库

再切换到<mysql安装位置>\data下。

同样可以发现有这个几个文件夹

如果再<mysql安装位置>\data新建一个文件夹

再通过show DATABASES;命令查看当前有哪些数据库,可以发现确实多了刚才新建文件夹(数据库)。

所以就得出了一个结论,数据库其实就是一个文件夹。

数据表的理解

数据库相当于文件夹,那数据库里面放的,就是数据表了。

表内容

其实会发现,数据表Excel很相似。

Excel有啥数据表也有啥。

通常都是表头(蓝色框),表内容(红色框)

总结

数据库就是一个个文件夹

数据表是不能单独存在的,需要放在数据库中,xlsx举例使用。

数据库又分表头,表内容,,

数据库相关命令

查看当前Mysql下的数据库

命令

show DATABASES;

结果

使用数据库

使用数据库的意思就是。

数据库其实就是一个个文件夹,使用数据库就是进入这个数据库,相当于进入到这个文件夹里里面。

命令

use <数据库名字>;
# 例如 use <mysql> 进入mysql这个数据库,

在日常使用中,要操作哪个数据库里面的表,一定要use 这个数据库

创建数据库

命令

CREATE DATABASE <数据库名称> DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
# 示例,创建一个school数据库
CREATE DATABASE school DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

执行结果

删除数据库

DROP <数据库名称>
# 示例,删除 school 数据库
DROP school

数据表相关命令

记得一定要use 数据库,进入数据库才能操作表。

创建表

格式

create table 表名(
    列名  列类型  [其他参数1 其他参数2 ...],
    列名  列类型  [其他参数1 其他参数2 ...]
...
)ENGINE=InnoDB DEFAULT CHARSET=utf8

其他参数包括有

  • 是否可以为空
  • not null — 不可空
    null — 可空
  • 默认值
  • defalut 2 — 默认2
  • 自增自增一般用在id上,并且只能有一个自增列,插入时不需要管这个列,会自动添加值。
  • auto_increment — 自增
    — 虽然自增加这一个关键字就行了,但是由于主键是不能为空的,所以要配合其他关键字
    not null auto_increment primary key
  • 主键主键,一种特殊的唯一索引,不允许有空值。如果主键使用单个列,则它的值必须唯一。如果是多列,则其组合必须唯一。

  • primary key(nid,num)
  • 外键
  • constraint fk_cc foreign key (color_id) references color(nid)

其他参数一一对应上就行了。

示例

创建一个老师表

create table teacher(
    id  int not null auto_increment PRIMARY key,
    teacher_name varchar(16) not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8

查看数据库有哪些表

命令

show TABLES;

结果

删除表

drop table <表名>

清空表

delete from <表名>
truncate table <表名>

总结

其实这章讲的还是比较简单的,在使用Mysql时,一定要注意一个问题,就是sql后面一定要加一个;

这章主要讲的是数据库的操作数据表的操作。

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。

敬往事一杯酒,自此不再回头。

Vue的学习笔记(下篇)

一、什么是Vue.js?

Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

前面几天我们已经分享了Vue的学习笔记(中篇)和Vue的学习笔记(上篇),今天我们一起来看看下篇。

二、Vue的v-for循环

(一)v-for循环普通数组

1.在data中定义普通数组;

data(){
return{
list: [1, 2, 3, 4, 5]
}
}

2.在html中使用v-for指令渲染;

<p v-for="(item, i) in list">索引值是:{{i}} --- 每一项的值是:{{item}}</p>

3.效果图如下图:

Vue的学习笔记(下篇)

(二)v-for循环对象数组

1.在data 中定义对象数组;

data(){
return{
        list: [
  { id: 1, name: 'zhan1' },
  { id: 2, name: 'zhan2' },
  { id: 3, name: 'zhan3' },
  { id: 4, name: 'zhan4' }
]
}
}

2.在html中使用v-for指令渲染:

<p v-for="(user, i) in list">Id:{{ user.id }} --- 名字:{{ user.name }} --- 索引值是:{{i}}</p>

3.效果图如下图:

Vue的学习笔记(下篇)

(三)v-for循环对象,在遍历对象的身上的键值对时候,除了有val、key,在第三个位置还有一个索引值。

1.在data定义一个对象;

data(){
return{
user: {
        id: 1,
        name: 'zhan',
        gender: '男'
   }
}
}

2.在html中使用v-for指令渲染:

<p v-for="(val, key, i) in user">值是:{{ val }} --- 键是:{{key}} -- 索引值是:{{i}}</p>

3.效果图如下图:

Vue的学习笔记(下篇)

(四)v-for迭代数字 ###在in后面我们放过普通数组、对象数组、对象,还可以放数字,如果使用v-for迭代数字的时候,前面的count值的从1开始。

1.在html中使用v-for指令渲染:

<p v-for="count in 5">这是第 {{ count }} 次循环</p>

2.效果图如下图:

Vue的学习笔记(下篇)

(五)v-for循环中key属性的使用

v-for 循环的时候,key 属性只能使用number获取string,在key使用的时候,必须使用v-bind属性绑定的形式,指定key的值,在组件中,使用v-for循环的时候,如果有v-for的同时,指定唯一的字符串/数字类型:key的值。

1.在data 中定义对象数组;

data(){
return{
        list: [
  { id: 1, name: 'zhan1' },
  { id: 2, name: 'zhan2' },
  { id: 3, name: 'zhan3' },
  { id: 4, name: 'zhan4' }
]
}
}

2.在html中使用v-for指令渲染代码如下图:

Vue的学习笔记(下篇)

3.效果图如下图:

Vue的学习笔记(下篇)

三、Vue过滤器的基本使用

1.首先定义一个 Vue 全局的过滤器,名字叫做msgFormat,字符串的replace方法的第一个参数,除了可以写一个字符串之外,还可以定义一个正则。

2.在js的代码中,如以下代码:

Vue.filter('msgFormat', function (msg, arg, arg2) {
  return msg.replace(/day/g, arg + arg2)
})


Vue.filter('test', function (msg) {
  return msg + '========'
})

3.在html代码中,如以下代码:

<p>{{ msg | msgFormat('我', '123') | test }}</p>

4.在data中,定义一个msg:

data(){
return{
msg:'the day is cloudless'
}
}

5.效果图如下图:

Vue的学习笔记(下篇)

四、总结

1.vue中的v-for循环有普通数组、对象数组、对象、迭代数字、key属性的使用,这些用法的详解,希望对大家有所帮助。

2.vue过滤器的基本使用局部过滤器优先于全局过滤器被调用,一个表达式可以使用多个过滤器,过滤器之间需要用管道符“|”隔开,其执行顺序从左往右。

3.这些代码比较简单,希望对你有帮助!

Vue的学习笔记(中篇)

一、什么是Vue.js?

Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。上篇文章我们讲述了基础,可以戳这里:Vue的学习笔记(上篇)。这篇文章我们继续捋一捋~

二、Vue中使用样式class

第一种使用方式,传递一个数组,这里的class需要使用v-bind的数据绑定;

<h1 :class="['thin', 'italic']">hello world1!</h1>

第二种使用方式,在数组中使用三元表达式;

<h1 :class="['thin', 'italic', flag?'active':'']">hello world2!</h1>

第三种使用方式,在数组中使用对象来代替三元表达式,来提高代码的可读性;

<h1 :class="['thin', 'italic', {'active':flag} ]">hello world3!</h1>

在为class使用v-bind绑定对象时候,对象的属性是一个类名,由于对象的属性可以带引号,也可以不带,属性的值是一个标识符;

<h1 :class="classObj">hello world!</h1>

在css的样式代码如下图:

在js的代码如下图

效果图如下图:

三、Vue中样式style:vue中样式是动态绑定style,对象是不需要键值对的集合。

第一种使用方式是将键值对的对象写在data中,直接的动态绑定;

<h1 :style="styleObj1">The first H!!</h1>

第二种使用方式是多个键值对对象,使用数组方式,依次写入;

<h1 :style="[ styleObj1, styleObj2 ]">The first H1!!</h1>

在js的代码如下图:

效果图如下图:

四、v-if和v-show的使用

v-if的特点:每次都会重新删除或创建元素,有较高的切换性能消耗。

v-show的特点:每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式,有较高的初始渲染消耗。

v-if和v-show的使用:

如果元素涉及到频繁的切换,最好不要使用 v-if, 而是使用 v-show,如果元素可能永远也不会被显示出来被用户看到,则使用v-if。

1.在html代码中,如以下的代码:

<input type="button" value="toggle" @click="flag=!flag">
<h3 v-if="flag">这是用v-if控制的元素</h3>
<h3 v-show="flag">这是用v-show控制的元素</h3>

2.在data中定义一个flag,如以下的代码;

data(){
      return{
        flag: false,
  }
}

3.效果图如下图:

五、总结

1.在vue中使用样式class,有三种方式传递一个数组、数组中的三元表达式、使用对象来代替三元表达式,在为class使用v-bind绑定对象,对象属性是一个类名,属性的值是一个标识符。

2.在vue中使用样式style,vue中样式动态绑定style,对象是不需要键值对的集合,有两种方式将键值对的对象写在data中直接的动态绑定、多个键值对对象,使用数组方式,依次写入。

3.vue-show本质是标签display设置为none,控制隐藏,vue-if是动态的向DOM树内添加或者删除DOM元素。

4.代码比较简单,希望对你有帮助!