Sql

SQL RIGHT JOIN 关键字

August 28, 2022
Sql, JOIN, 连接, RIGHT JOIN, RIGHT

SQL RIGHT JOIN 关键字 # RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。 SQL RIGHT JOIN 语法 # SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name=table2.column_name; 或: SELECT column_name(s) FROM table1 RIGHT OUTER JOIN table2 ON table1.column_name=table2.column_name; 注释:在某些数据库中,RIGHT JOIN 称为 RIGHT OUTER JOIN。 SQL RIGHT JOIN 实例 # 下面的 SQL 语句将返回网站的访问记录。 以下实例中我们把 domains 作为左表,logs 作为右表: MariaDB [learnsql]> select domains.domainname,logs.google,logs.baidu,logs.sogou from domains right join logs on domains.id=logs.id order by logs.baidu desc; +---------------+--------+--------+--------+ | domainname | google | baidu | sogou | +---------------+--------+--------+--------+ | NULL | 000749 | 002977 | 000358 | | NULL | 002123 | 002939 | 000331 | | NULL | 002701 | 002843 | 000315 | | pornie. ...

SQL FULL OUTER JOIN 关键字

August 28, 2022
Sql, JOIN, 连接, FULL OUTER JOIN, FULL OUTER

SQL FULL OUTER JOIN 关键字 # FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行. FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。 SQL FULL OUTER JOIN 语法 SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name=table2.column_name; SQL FULL OUTER JOIN 实例 # 下面的 SQL 语句选取所有网站访问记录。 MySQL中不支持 FULL OUTER JOIN,你可以在 SQL Server 测试以下实例。 SELECT domains.domainname, logs.baidu, FROM domains FULL OUTER JOIN logs ON domains.id=logs.id ORDER BY logs.baidu DESC; 注释:FULL OUTER JOIN 关键字返回左表(doamins)和右表(logs)中所有的行。如果 “domains” 表中的行在 “logs” 中没有匹配或者 “logs” 表中的行在 “domains” 表中没有匹配,也会列出这些行。

SQL UNION 操作符

August 28, 2022
Sql, 连接, UNION, UNION ALL

SQL UNION 操作符 # SQL UNION 操作符合并两个或多个 SELECT 语句的结果。 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。它可以从多个表中选择数据,并将结果集组合成一个结果集。使用 UNION 时,每个 SELECT 语句必须具有相同数量的列,且对应列的数据类型必须相似。 SQL UNION 语法 # SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; UNION 操作符默认会去除重复的记录,如果需要保留所有重复记录,可以使用 UNION ALL 操作符。 SQL UNION ALL 语法 # SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2; 注释:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。 演示数据库 MariaDB [dn]> select * from isps; +-----+------------+--------------------------------------------------+ | idx | name | intro | +-----+------------+--------------------------------------------------+ | 1 | West | 西部数码老牌互联网基础服务提供商 | | 2 | Nameliso | Namesilo是一家美国的域名注册商 | | 3 | eName | 易名科技为国内知名的域名服务机构 | | 4 | CloudFlare | Cloudflare 是一个全球性的云平台 | +-----+------------+--------------------------------------------------+ MariaDB [dn]> select * from dnl; +-----+--------------------+------------+------------+------------+------------------+ | idx | Name | Created | Expiration | ISP | Note | +-----+--------------------+------------+------------+------------+------------------+ | 001 | vps. ...

SQL SELECT INTO 语句

August 16, 2024
Sql, SELECT, SELECT INTO

SQL SELECT INTO 语句 # 通过 SQL,您可以从一个表复制信息到另一个表。 SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。 注意: MySQL 数据库不支持 SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT 当然你可以使用以下语句来拷贝表结构及数据: CREATE TABLE newT AS SELECT * FROM oldT SQL SELECT INTO 语法 # 假设有一个名为 isps 的表,包含以下数据: MariaDB [dn]> select * from isps; +-----+------------+--------------------------------------------------+ | idx | name | intro | +-----+------------+--------------------------------------------------+ | 1 | West | 西部数码老牌互联网基础服务提供商 | | 2 | Nameliso | Namesilo是一家美国的域名注册商 | | 3 | eName | 易名科技为国内知名的域名服务机构 | | 4 | CloudFlare | Cloudflare 是一个全球性的云平台 | +-----+------------+--------------------------------------------------+ 4 rows in set (0. ...

10个高级的SQL查询技巧

Sql, CTEs, SQL Optimization, 优化, Sql优化

随着数据量持续增长,对合格数据专业人员的需求也会增长。具体而言,对SQL流利的专业人士的需求日益增长,而不仅仅是在初级层面。 因此,Stratascratch的创始人Nathan Rosidi以及我觉得我认为10个最重要和相关的中级到高级SQL概念。 那个说,我们走了! 常见表表达式(CTEs) # 如果您想要查询子查询,那就是CTEs施展身手的时候 - CTEs基本上创建了一个临时表。 使用常用表表达式(CTEs)是模块化和分解代码的好方法,与您将文章分解为几个段落的方式相同。 请在Where子句中使用子查询进行以下查询。 SELECT name, salary FROM People WHERE NAME IN ( SELECT DISTINCT NAME FROM population WHERE country = "Canada" AND city = "Toronto" ) AND salary >= ( SELECT AVG( salary ) FROM salaries WHERE gender = "Female") 这似乎似乎难以理解,但如果在查询中有许多子查询,那么怎么样?这就是CTEs发挥作用的地方。 with toronto_ppl as ( SELECT DISTINCT name FROM population WHERE country = "Canada" AND city = "Toronto" ) , avg_female_salary as ( SELECT AVG(salary) as avgSalary FROM salaries WHERE gender = "Female" ) SELECT name , salary FROM People WHERE name in (SELECT DISTINCT FROM toronto_ppl) AND salary >= (SELECT avgSalary FROM avg_female_salary) 现在很清楚,Where子句是在多伦多的名称中过滤。如果您注意到,CTE很有用,因为您可以将代码分解为较小的块,但它们也很有用,因为它允许您为每个CTE分配变量名称(即toronto_ppl和avg_female_salary) ...

20个SQL优化方法

Sql, Optimization, SQL Optimization, 优化, Sql优化

查询SQL尽量不要使用select *,而是具体字段 # 反例 SELECT * FROM user 正例 SELECT id,username,tel FROM user 理由 节省资源、减少网络开销。 可能用到覆盖索引,减少回表,提高查询效率。 注意:为节省时间,下面的样例字段都用*代替了。 避免在where子句中使用 or 来连接条件 # 反例 SELECT * FROM user WHERE id=1 OR salary=5000 正例 使用union all SELECT * FROM user WHERE id=1 UNION ALL SELECT * FROM user WHERE salary=5000 - 分开两条SQL写 SELECT * FROM user WHERE id=1 SELECT * FROM user WHERE salary=5000 理由 使用or可能会使索引失效,从而全表扫描; 对于or没有索引的salary这种情况,假设它走了id的索引,但是走到salary查询条件时,它还得全表扫描; 也就是说整个过程需要三步:全表扫描+索引扫描+合并。如果它一开始就走全表扫描,直接一遍扫描就搞定; 虽然mysql是有优化器的,出于效率与成本考虑,遇到or条件,索引还是可能失效的; 尽量使用数值替代字符串类型 # 正例 ...

Excel数据按sheet导入SQLite

Sql, SQLite, Excel, Sheet, Pandas

以下为python实例脚本,将名为test.xlsx的表格,按每个sheet名新建table,导入SQlite3数据库中。 ## 导入库 import pandas as pd import sqlite3 ##建立数据库文件 con=sqlite3.connect('test.db') ##读取excel xlsx=pd.read_excel('test.xlsx', sheet_name=None) ##遍历每个sheet for sheet in xlsx.keys(): ## 按sheet读取excel内容 df=pd.read_excel('test.xlsx',sheet_name=sheet) ##按sheet名命名table,写入数据库 df.to_sql(sheet,con, index=False,if_exists="replace") con.commit() con.close()

MariaDB教程

MariaDB教程, MariaDB, Maria, Sql

MariaDB教程 # 安装MariaDB # MariaDB的所有下载都位于官方MariaDB基金会网站的下载部分。 单击所需版本的链接,并显示多个操作系统,体系结构和安装文件类型的下载列表。 在LINUX / UNIX上安装 # 如果你熟悉Linux / Unix系统,只需下载源码来构建你的安装。 我们推荐的安装方式是使用分发包。 MariaDB提供用于以下Linux / Unix发行版的软件包 - RedHat / CentOS / Fedora Debian / Ubuntu 以下发行版在其存储库中包含MariaDB软件包 - openSUSE Arch Linux Mageia Mint Slackware 按照以下步骤在Ubuntu环境中安装 步骤1 - 以root用户身份登录。 步骤2 - 导航到包含MariaDB包的目录。 步骤3 - 使用以下代码导入GnuPG签名密钥 sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db 步骤4 - 将MariaDB添加到sources.list文件。 打开文件,并添加以下代码 - sudo add-apt-repository 'deb http://ftp.osuosl.org/pub/mariadb/repo/5.5/ubuntuprecise main' 步骤5 - 刷新系统以下 sudo apt-get update 步骤6 - 安装MariaDB与以下 ...

SQL 速成手册

Sql, Guide, SQL Guide, 手册, Sql手册

SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准化编程语言。 SQL 被广泛用于数据库系统中(如 MySQL、PostgreSQL、Oracle、SQL Server),用于执行查询、更新数据、管理数据库结构和控制数据库访问权限。 SQL 的主要功能 # 基本查询语句 SELECT - 用于从数据库中选择数据,返回结果集。 WHERE - 用于过滤记录,指定查询条件。 ORDER BY - 用于对结果集进行排序,可以按升序或降序排列。 DISTINCT - 用于返回唯一不同的值,去除重复记录。 LIMIT - 用于指定返回的记录数量,常用于分页。 表操作语句 CREATE TABLE - 用于创建新表,定义表的列和数据类型。 ALTER TABLE - 用于修改现有表的结构,例如添加、删除或修改列。 DROP TABLE - 用于删除表及其所有数据。 数据操作语句 INSERT INTO - 用于向表中插入新记录。 UPDATE - 用于修改表中的现有记录。 DELETE - 用于删除表中的记录。 函数与聚合操作 COUNT - 用于返回匹配条件的行数。 SUM - 用于返回列的总和。 AVG - 用于返回列的平均值。 MIN - 用于返回列的最小值。 MAX - 用于返回列的最大值。 子查询与联接 INNER JOIN - 用于返回两个表中都存在的匹配记录。 LEFT JOIN - 用于返回左表中的所有记录和右表中的匹配记录。 RIGHT JOIN - 用于返回右表中的所有记录和左表中的匹配记录。 FULL JOIN - 用于返回两个表中所有记录,不管是否匹配。 SUBQUERY - 用于在查询语句中嵌套另一个查询。 高级操作 ...

SQLite教程

SQLite, SQLite教程, Sql

SQLite教程 # 安装SQLite # SQLite官网在此 https://sqlite.org/ 下载页在此 https://sqlite.org/download.html Windows下载Precompiled Binaries for Windows下的sqlite-tools-win32-x86-3390200.zip 下载后解压即可使用。 D:\apps\sqlite>sqlite3.exe learnsql.db ###建立数据库文件learnsql.db SQLite version 3.39.2 2022-07-21 15:24:47 Enter ".help" for usage hints. sqlite> .databases ###查看数据库 main: D:\apps\sqlite\learnsql.db r/w sqlite> .quit ###退出sqlite Debian下直接使用sudo apt install sqlite3命令来安装。 alair@hpzb14:~$ sqlite3 learnsql SQLite version 3.34.1 2021-01-20 14:10:07 Enter ".help" for usage hints. sqlite> .database main: /home/alair/learnsql r/w sqlite> .quit SQLite常用操作 # 连接SQLite数据库 # 直接输入sqlite3即可开始使用slqite,默认session为内存临时会话,关闭数据就会清理。 C:\Users\alair\Documents>sqlite3 SQLite version 3.39.2 2022-07-21 15:24:47 Enter ". ...