![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SQL入门
愈努力俞幸运
这个作者很懒,什么都没留下…
展开
-
MySQL表的创建、删除、修改、复制
删除表:drop table [if exists] 修改表:alter table。tb_name为创建的表的名字。使用以下代码创建上述表格。原创 2022-11-07 18:55:38 · 600 阅读 · 0 评论 -
mysql group by详解
聚合函数包括 COUNT(),SUM(),AVG(),MAX() 和 MIN()等。多个字段分组查询时,会先按照第一个字段进行分组。如果第一个字段中的数据都是唯一的,那么 MySQL 将不再对第二个字段进行分组。上面实例在分组过程中,先按照 age 字段进行分组,当 age 字段值相等时,再把 age 字段值相等的记录按照 sex 字段进行分组。GROUP_CONCAT() 函数会把每个分组的字段值都显示出来。id和number中有的单元格里面的内容是多个值的,只会显示一个。除了都显示,我们还常用。原创 2022-10-20 17:45:19 · 1183 阅读 · 1 评论 -
窗口函数 row_number() over partition by
函数的含义为先分组再排序, row_number() over (partition by col1 order by col2),上述代码含义为在每个学校的内部根据gpa进行一次排名,获得每个学生在学校的名次数据,desc代表是按照从大到小降序排列。表示根据col1分组,在分组内部根据col2排序,在每个组内将排名填充上。为了更好的理解,我们来看个例 子。原创 2022-10-19 18:25:46 · 368 阅读 · 0 评论 -
存储过程,创建存储过程,调用存储过程,view相当于存了个表,storedprocedure相当于存了语句。删除存储过程。在存储过程中添加参数,默认参数,参数验证,输出参数
在我们的应用代码里,我们用这些存储过程来获取或保存数据,存储过程是一个包含一堆sql代码的数据库对象,使用存储过程来存储或管理Sql代码。统计未支付用户的未支付发票的个数。用参数来给调用程序返回值。默认不给州返回所有顾客。在存储过程中添加参数。原创 2022-10-17 18:21:55 · 152 阅读 · 0 评论 -
创建视图,更改或删除视图,可更新视图
如果我们更新 invoices_with_balance中的某条数据使得balance等于零,那么你会发现,这一行会在invoices_with_balance视图中消失,因为我们当时规定balance>0,当通过视图更新数据,一些行可能会消失。有时候不希望update或者delete语句将行从视图中删除,可以返回创建视图的代码中,在最后加上with check option,如果修改会行会从视图消失,则会报错。上面这个视图没有DISTINCT等,所以是可更新视图。除了删除更新还可以插入一行。原创 2022-10-17 01:15:48 · 746 阅读 · 0 评论 -
if函数,case运算符
【代码】if函数,case运算符。原创 2022-10-16 01:26:02 · 88 阅读 · 0 评论 -
格式化日期和时间,空值换其他值,date,time_format,计算日期和时间 date_add,date_sub,datediff,time_to_sec, ifnull,coalesce
可以搜索 mysql date format string。原创 2022-10-16 00:29:27 · 117 阅读 · 0 评论 -
日期函数,now,curdate,curtime,year,month,day,hour,minute,second,dayname,monthname,extract
这些函数返回的是整数值。原创 2022-10-15 23:17:06 · 61 阅读 · 0 评论 -
字符串函数length求字符串长度upper,lower大小写转换ltrim,rtrim移除字符串左侧右侧的空白字符或其它预定义字符trim删除字符串前后的空格left,right,subtring
搜索mysql string functions 找字符串完整名单。用S2代替S中所有字符串S1。原创 2022-10-15 22:35:32 · 125 阅读 · 0 评论 -
数值函数,round函数四舍五入,truncate函数用来截断数字,ceiling向下取整,floor向上取整,abs用来计算绝对值,rand用来生成0-1区间的随机数
其它的数值函数,打开浏览器,搜索mysql numeric functions。原创 2022-10-15 17:21:25 · 126 阅读 · 0 评论 -
子查询,in运算符写子查询,all关键字,any,some关键字,相关子查询(子查询和主查询有关系)。exists运算符。select子句中的子查询.FROM子句中的子查询,此时子查询,必须起别名
我们也可以通过join来实现子查询的功能。对外查询的每一行数据,都运行一下子查询。练习查询所有没被订购过的产品。select子句子查询 练习。select子句中的子查询。from语句中的子查询。原创 2022-10-15 17:01:23 · 209 阅读 · 0 评论 -
GROUP BY分组,having 子句,在分组之后筛选数据.with rullup汇总数据
having中用到的列一定是select子句中存在的,换句话说我们不能使用payment列等;where子句在分组前筛选数据,having子句在分组后筛选数据。而where子句可以用任何列,不管用没有在select子句中。where筛选原始数据,having筛选处理后的数据。where子句只能写表中存在的列,不能用起的别名。计算每个顾客下半年的销售额。而having可以。原创 2022-09-28 18:06:37 · 464 阅读 · 0 评论 -
删除行.聚合函数(汇总数据)
*会取重复条目,如果想要排除重复条目,需要使用distinct*/在invoices表中得到下列结果。原创 2022-09-28 15:20:37 · 164 阅读 · 0 评论 -
更新单行update。在update语句中用子查询
练习:更新积分超过3000的顾客订单的评论。在update语句中用子查询。可以看到客户3有多个发票。原创 2022-09-23 18:24:11 · 2866 阅读 · 0 评论 -
创建表的复制;使用select语句作为子查询
创造上述表部分记录的复制,并置于新表invoices_archived中,但是那张表我们不想要顾客id列,我们想要顾客名列,另外只复制支付过的发票。/*为了创建新表我们使用create table 新建的表明as*/思路:首先我们要得到想要复制的表,既然想要顾客名列所以需要join。注意我们新创建的表没有把id当作主列,也没有自动升序。/*这是SELECT * FROM orders。我们也可以在insert语句下用一段子查询*/子查询是另外一段sql语句的选择语句。从一张表复制数据到另外一张表。原创 2022-09-23 14:53:10 · 292 阅读 · 0 评论 -
列属性,往一张表中插入insert into数据,replace,往多张表插入数据,更新,删除数据。LAST_INSERT_ID()
插入分层行(子表,母表) insert hierarchical row。我们向订单表里添加一行,并返回添加一行的订单id。插入单行 insert into。最后一行就是我们刚刚插入的。原创 2022-09-22 16:10:09 · 301 阅读 · 0 评论 -
unions合并多段查询的记录
练习得到下列查询,顾客表里是没有type列的,注意我们。基于同一个表格写查询将结果合并到一个结果集。基于不同表格写查询将结果合并到一个结果集。可以看到列名是基于第一段的查询。原创 2022-09-20 15:33:39 · 116 阅读 · 0 评论 -
using子句,如果两个表中列名称完全一样,我们可以使用一个更简单的using子句替换on子句,内连接外连接都可以使用using子句。自然连接,nature join.交叉连接,cross join
第一张表中的每条记录都会和第二条表中的每条记录结合。连接条件添加多列怎么办?原创 2022-09-19 18:42:58 · 264 阅读 · 0 评论 -
outer joins-左连接,右连接;多表外连接,自外连接,self outer join
首先顾客表和订单表左连接,得到一个大表,这个大表的订单在和托运表内连接,根据内连接定义是取两表交集。不管条件正不正确,所以我们会得到所有顾客,如果它们有订单我们就可以看到订单。可以看出结果表中只有部分顾客的id,这是因为有的顾客没有订单。使用左连接时,所有左表的记录(也就是本案例的顾客)会被返回。但是想要看到所有顾客不管他们有没有订单一个怎么样做?所有订单都显示,不管它们有没有发货人。要得到这个表格因该怎么写。左连接是以左边表为基础。内连接是两个表取交集。原创 2022-09-19 15:35:42 · 155 阅读 · 0 评论 -
join mutiple tables多表连接,复合连接条件即使用多个条件连接这两个表格。隐式连接,implicit join
比如在customer表中,顾客id唯一识别了这张表。但存在我们无法使用单一列来准确识别某张表里列的情况。我们有订单id,订单日期,顾客姓名,还有订单状态。黄健代表这两列都有主键,我们称为复合主键。查询结果为空,因为没匹配上。原创 2022-09-19 02:10:46 · 381 阅读 · 0 评论 -
joining across database 跨数据库连接,将分散在多个数据库的表中的列合并起来.将一张表与它自己连接
把sql_store数据库中的order itrms表和sql inventory数据里的products表连接到一起。唯一的区别就是要自己同一个表我们要使用不同的别名。将表与她自己连接,与与其他表连接其实差不多。将分散在多个数据库的表中的列合并起来。将一张表与它自己连接。原创 2022-09-13 17:44:54 · 198 阅读 · 0 评论 -
inner joins内连接,join on在多张表格中检索数据,通常需要在多张表格中选取列,当多张表有一样的列,需要添加表名的前缀,紧跟每个表的后面可以使用别名
结果表中先是orders表中的列,因为我们先写的order。如何选取orders表中的订单,但我们不展示顾客id。当多张表有一样的列,需要添加表名的前缀。紧跟每个表的后面可以使用别名,简化代码。原创 2022-09-12 19:55:10 · 199 阅读 · 0 评论 -
LIMIT clause限定查询返回的记录,offset, LIMIT子句要永远放在最后
6就是偏移量(offset),也就是告诉mysql跳过前6条记录,然后获取3条记录。可以选择性添加一个偏移量(offset)跳过前6条记录,然后选择三条记录。LIMIT子句要永远放在最后。获取顾客表中的前三位顾客。限制查询返回的记录数。原创 2022-09-05 14:37:21 · 230 阅读 · 0 评论 -
order by clause,为数据排序,order by desc降序,也可用多列给数据排序,也可添加新的列使用别名排序,order by子句的表达式不一定是个列名称,它可以是别名或算数表达式
可以看到,customer_id前面有一个黄色的键,意思是这一列是这张表的主键列,这一列中的值要能够唯一识别表里的记录。注意,我们可以使用任何列排序数据,不管那列是不是在select子句中。order by子句的表达式不一定是个列名称,它可以是算数表达式。现在我们可以看到顾客不在根据id排序,它们根据名字升序排序了。通过所在的州给顾客降序排序,然后在每个州里根据名字升序。首先想要根据州给顾客排序,然后在每个州里用名字排序。我们也可以有一个复杂的数学表达式,都可以。我们还可以 通过列位置给数据排序。原创 2022-09-05 13:32:04 · 1158 阅读 · 0 评论 -
is null operator,is not null 搜索缺失某个属性的记录
获取customers中缺失电话号码的顾客。原创 2022-09-05 12:39:01 · 83 阅读 · 0 评论 -
regexp(regular expression) operator,搜索字符串,^代表字符串开头,$表示字符串末尾,|表示多个搜寻模式(或),
使用[]和-代表一个范围。[a-f]从a到f的任意字母。[abdc]使用中括号任意匹配在括号里列举的单字符。原创 2022-09-04 13:54:10 · 223 阅读 · 0 评论 -
like,not like operator,检索遵循特定字符串模式的行,%表示任意字符,_表示单个字符
表示任意字符(0个,1个,。搜寻姓氏中以y结尾的顾客。搜寻姓氏中有b的顾客。原创 2022-08-27 23:26:58 · 158 阅读 · 0 评论 -
between operator, 同一属性范围内比较
同一属性范围内比较可以使用between。原创 2022-08-27 16:24:41 · 103 阅读 · 0 评论 -
in operator ,in运算符,not in。比较同属性的一系列值,合并条件
【代码】in operator ,in运算符,not in。同一系列的值比较统一属性,合并条件。原创 2022-08-27 16:06:12 · 85 阅读 · 0 评论 -
and ,or,not operators,逻辑运算符,and>or,and优先评估
or: 只要有一个结果正确就在结果表中返回。not逻辑运算符,用于否定一个条件。and的优先级大于or。原创 2022-08-27 12:05:37 · 191 阅读 · 0 评论 -
where clause,where子句,比较运算符,日期值的表示
我们用引号表示日期值,尽管日期值不是字符串,但在sql中我们要给日期值加上引号。标准格式为'****-**-**',4位年份,2位月份,2位日期。>,>=,原创 2022-08-26 23:33:51 · 499 阅读 · 0 评论 -
select clause,选择子句,添加新的列,给列起别名,as,distinct删去重复项
如果想在新的列名里加空格,需要在两侧加上引号,单引号,双引号都可。first_name, last_name, points,列。first_name, last_name, points,列。意思是将points列的每个数值加10然后在扩大100倍。意思是将points列的每个数值加10*/添加新的列 (points+10)*100。我们可以使用distinct删去重复的项。添加新的列 points+10。可以选择给每列和结果集一个别名。选择customers的。或者指定我们想要返回的列。...原创 2022-08-26 22:24:43 · 292 阅读 · 0 评论 -
the select statement,选择语句,where子句筛选结果,order by给数据排序
换行符,大间隔,tab在sql中都没有用。order by给数据排序。但最好把每个子句写在新的行里。where子句筛选结果。在单一表格中查询数据。原创 2022-08-26 21:59:12 · 100 阅读 · 0 评论 -
SQL中的单行注释,多行注释
采用 "--"(双减号)进行单行注释,注意:"--"与注释内容要用空格隔开才会生效。1、以上所说注释方式是SQL的标准注释方式,凡支持SQL的数据库都可以使用这些注释方式。原创 2022-08-26 21:03:49 · 4264 阅读 · 0 评论