共计 5553 个字符,预计需要花费 14 分钟才能阅读完成。
数据库基础中的 mysql 语句有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
数据库与数据库软件:
数据库是数据容器,可以理解为文件,数据库软件是数据库管理系统,
提供用户对数据库文件的操作
schama(模式):
关于数据库和表的布局及特性的信息
列 (column):
表由列组成,列中存储着表中某部分的信息。
行 (row):
表中的数据是按行存储的
主键:
表中每一行都应该有可以唯一标识自己的一列,称为主键
主键可以由单个列构成,也可以由多个列构成
SQL:
结构化查询语言,用于和数据库通信
查询数据库和表命令:
SHOW DATABASES;
SHOW TABLES;
SHOW COLUMNS FROM COLLATIONS; // 显示 COLLATIONS 中的所有列
auto_increment // 自动增量,每添加一个行,该值自动加一
SELECT prod_name FROM products; // 从 prducts 中检索出 prod_name
SELECT prod_id,prod_name FROM products; // 检索多个列
SELECT DISTINCT vend_id from products; // 返回一列中不同的值 (过滤掉相同的)
SELECT prod_name FROM products LIMIT 5; // 限制最多输出 5 行
SELECT prod_name FROM products LIMIT 4,5; // 限制最多从行 4 输出 5 行
SELECT products.prod_name FROM products; // 完全限定
SELECT products.prod_name FROM crashcourse.products; // 完全限定 (列和表)
SELECT prod_name FROM products ORDER BY prod_name; // 排序
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name; // 对多个列排序 (如果 prod_price 存在重复,就对 prod_name 重新排序)
SELECT prod_name FROM products ORDER BY prod_name DESC/ESC; // 排序 (升序或降序)
SELECT prod_id,prod_price,prod_name FROM products WHERE prod_price = 2.5; // 使用 where 过滤 (=《betown 等操作)
SELECT prod_id,prod_price,prod_name FROM products WHERE prod_price BETWEEN 5 AND 10;// 在中间
SELECT prod_id,prod_price,prod_name FROM products WHERE prod_price vend_id = 1003 AND prod_price =10 3= 123= 2005= and= select= prod_name= from= products= where= vend_id= 1003; prod_price= not= like= vendors= order= by= as= vend_title= item_price= expanded_price= orderitems= order_num= 20005; vend_name_upcase= left= abc= right= length= lower= upper= ltrim= rtrim= substring= bc1= concat= abc123xyz= orders= between= avg_price= num_cust= max_price= items_ordered= total_price= distinct= price_avg= num_prods= group= having= cust_id=
使用 ORDER BY 实现分组的排序
SELECT order_num,SUM(quantity*item_price) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price) =50 ORDER BY ordertotal;
子查询可以用来减少查询的语句条数
例如:
SELECT order_num FROM orderitems WHERE prod_id = TNT2 // 返回结果 20005,20007
SELECT cust_id FROM orders WHERE order_num IN(20005,20007)
SELECT cust_id FROM orders WHERE order_num IN(SELECT order_num FROM orderitems WHERE prod_id = TNT2
计算字段使用子查询:
SELECT cust_name,cust_state,(SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders FROM customers ORDER BY cust_name;
联结:
(主键与外键)
分表是为了更好的存储与提升可伸缩性,但在使用 select 查询的时候就不得不采用联结的方法
SELECT vend_name,prod_name,prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id
表别名能够在单挑 SELECT 语句中不止一次的引用相同的表
SELECT prod_id,prod_name FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE prod_id = DTNTR
自联结方式:
SELECT p1.prod_id,p1.prod_name FROM products AS p1,products AS p2 WHERE p1.vend_id = p2.vend_id AND p2.prod_id = DTNTR
外部联结
联结包含在相关表中没有关联行的行,这种类型的联结成为外部联结
SELECT customers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id;
左向外联结和右向外联结
左向外联结的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联结所匹配的行
RIGHT JOIN 和 RIGHT OUTER JOIN
右向外联结是左向联结的反向联结,将返回右表的所有行
FULL JOIN 或 FULL OUTER JOIN
完整外部联结返回左表和右表的所有行,当某行在另一个表中没有匹配行时,则另一个表的
选择表列包含空值,如果表之间有匹配行,则整个结果集包含基表的数据值。
带聚集函数的联结
SELECT customers.cust_name,customers.cust_id,COUNT(orders.order_num) AS num_ord FROM customers INNER JOIN orders ON customers.cust_id = orders.cust_id GROUP BY customers.cust_id;
此 SELECT 语句使用 INNER JOIN 将 customers 和 orders 表相互关联。GROUP BY 子句按客户分组数据,因此函数调用 COUNT(order.order_num) 对每个客户的订单技术,将它作为 num_ord 返回。
聚集函数也可以方便的与其他联结一起使用
SELECT customer.cust_name,customer.cust_id,COUNT(order.oder_num) AS num_ord FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id GROUP BY customers.cust_id;
组合查询:
多个查询 (多条 SELECT 语句),并将结果作为单个查询结果集返回
组合查询的应用场景:
在单个查询中从不同的表返回类似结构的数据
对单个表执行多个查询,按单个查询返回数据
如果使用 WHERE:
SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price =5 OR vend_id IN(1001,1002);
使用 UNION:
SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price =5 UNION SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN(1001,1002);
UNION 会自动去重,如果想要匹配所有行,可以使用 UNION ALL
SELECT 语句的输出用 ORDER BY 子句排序,在用 UNION 组合查询时,只能用一条 ORDER BY 子句。必须出现在最后一条 SELECT 语句之后。
SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price =5 UNION SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN(1001,1002) ORDER BY vend_id,prod_price;
INSERT INFO customers(cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email) VALUES(Pep E.LaPew , 100 Main Street , Los Angeles , CA , 90046 , USA ,NULL,NULL);
如果想插入多行
INSERT INFO customers(cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email) VALUES((Pep E.LaPew , 100 Main Street , Los Angeles , CA , 90046 , USA ,NULL,NULL)(…));
INSERT SELECT:
// 将 SELECT 语句返回的结果插入到另一张表中,通常用于将一张表导入到另外一张表中
INSERT INFO customers(cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email) SELECT cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email FROM custnew;
更新和删除数据:
更新某一行的数据:
UPDATE customers SET cust_mail = elmer@fudd.com WHERE cust_id = 10005;
更新多行:
UPDATE customers SET cust_mail = elmer@fudd.com,cust_email = elmer@fudd.com WHERE cust_id = 10005;
IGNORE 关键字可以忽略更新过程中的错误
删除数据:
DELETE FROM customers WHERE cust_id = 10006;
创建表:
CREATE TABLE customers
cust_id int NOT NULL AUTO_INCREMENT,
cust_name char(50) NOT NULL,
cust_address char(50) NULL,
cust_city char(50) NULL,
cust_state char(5) NULL,
cust_zip char(10) NULL,
cust_country char(50) NULL,
cust_contact char(50) NULL,
cust_email char(255) NULL,
PRIMARY KEY(cust_id)
)ENGINE=InnoDB;
NULL 值就是没有值或缺值。
更新表 ALTER
ALTER TABLE vendors ADD vend_phone CHAR(20);
删除刚刚添加的列:
ALTER TABLE Vendors DROP COLUMN vend_phone;
删除表:
DROP TABLE customers;
重命名表:
RENAME TABLE customers2 TO customers;
视图是虚拟的表,只包含使用时动态检索数据的查询
使用视图:
使用视图的原因:
重用 SQL 语句;
简化复杂的 SQL 语句,在编写查询后,可以方便的重用它而不必知道它的基本查询细节
使用表的组成部分而不是整个表
保护数据,可以给用户授予表的特定部分的访问权限而不是整个表的访问权限
更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
触发器:
触发器的主要作用是事件发生时某些语句自动执行
CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT Product added
关于数据库基础中的 mysql 语句有哪些问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。