数据库基础中的mysql语句有哪些
数据库基础中的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="">=2;
使用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; 1 创建表: 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语句有哪些问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。